根据arr得到一个newArr。
需求描述:
-数组数据是以2为基数的任意数值,例如,2,4,8,16,32,64,128等。。。。,长度是4
-数组从0号元素开始,相邻两个数两两比较,
若一致则相加的结果放入新数组,继续比较。
如果遇见0则跳过和下一位比较。
如果不一致,将当前值放入新数组,继续比较。
-新数组不够4位,则补0.
示例:
Arr=>newArr
[2,2,2,2] => [4,4,0,0]
[2,0,2,2] => [4,2,0,0]
[2,4,2,2] => [2,4,4,0]
[2,4,4,2] => [2,8,2,0]
[0,2,0,2] => [4,0,0,0]
- <!doctype html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>无标题文档</title>
- </head>
- <body>
- <script>
- var arr=[2,2,2,2];
- var newarr=[];
- var arrl=[];
- var j=0;
- var s=0;
- for(var i=0;i<arr.length;i++)
- {
- if(arr[i]==0)
- {continue;}
- else
- {
- arrl[j]=arr[i];
- j++;
- }
- }
- if(arrl.length<4)
- {
- for(var a=2;a--;a>=0)
- arrl.push(0);
- };
- console.log(arrl)
- for(var k=0 ;k<arrl.length;k++)//222
- {
- for(var l=k+1;l<arrl.length;l++)
- {
- if(arrl[k]==arrl[l])
- {
- newarr[s]=arrl[k]+arrl[l];
-
- }
- else
- {
- newarr[s]=arrl[k];
- //newarr[s+1]=arrl[l];
-
- }
- k++;l++;s++;
- break;
- }
- }
- for(var q=0;q<4;q++)
- {
- if(newarr.length<4)
- {
- newarr.push(0);
- }
- }
- console.log(newarr);
- </script>
- </body>
- </html>
复制代码
这个代码不满足
[2,4,2,2] => [2,4,4,0]
[2,4,4,2] => [2,8,2,0]
我实在是改不会了;
越改越迷,
求大哥救救我啊!
- function foo(arr) {
- const s = arr.filter(v => v !== 0).join(',')
- return (s.replace(/(\d+),\1/g, w => w[0] << 1) + ",0,0,0,0").split(',').map(v => 1 * v).slice(0,4)
- }
- console.log(foo([64, 128, 2, 2]))
复制代码
好了 无bug的
|