根据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的
|