js问题求助
根据arr得到一个newArr。
需求描述:
-数组数据是以2为基数的任意数值,例如,2,4,8,16,32,64,128等。。。。,长度是4
-数组从0号元素开始,相邻两个数两两比较,
若一致则相加的结果放入新数组,继续比较。
如果遇见0则跳过和下一位比较。
如果不一致,将当前值放入新数组,继续比较。
-新数组不够4位,则补0.
示例:
Arr=>newArr
=>
=>
=>
=>
=>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<body>
<script>
var arr=;
var newarr=[];
var arrl=[];
var j=0;
var s=0;
for(var i=0;i<arr.length;i++)
{
if(arr==0)
{continue;}
else
{
arrl=arr;
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==arrl)
{
newarr=arrl+arrl;
}
else
{
newarr=arrl;
//newarr=arrl;
}
k++;l++;s++;
break;
}
}
for(var q=0;q<4;q++)
{
if(newarr.length<4)
{
newarr.push(0);
}
}
console.log(newarr);
</script>
</body>
</html>
这个代码不满足
=>
=>
我实在是改不会了;
越改越迷,
求大哥救救我啊! function foo(arr) {
const s = arr.filter(v => v !== 0).join(',')
return (s.replace(/(\d+),\1/g, w => w << 1) + ",0,0,0,0").split(',').map(v => 1 * v).slice(0,4)
}
console.log(foo())
好了 无bug的 function foo(arr) {
const s = arr.filter(v => v !== 0).join('')
return (s.replace(/(.)\1/g, w => w << 1) + "0000").substr(0, 4).split('').map(v => 1 * v)
}
console.log(foo())
console.log(foo())
console.log(foo())
console.log(foo())
console.log(foo())
借助正则表达式这个现成的状态机可以直接实现捕获 kogawananari 发表于 2021-10-10 13:01
借助正则表达式这个现成的状态机可以直接实现捕获
不过有bug超过了十位数就不行了 你可以改改 思路一样的{:10_331:} kogawananari 发表于 2021-10-10 13:14
好了 无bug的
看不懂啊,姐姐
woshijunjun 发表于 2021-10-10 13:27
看不懂啊,姐姐
就是先去掉0 然后把一样的合并再补0就行了应用场景我猜是2048游戏 kogawananari 发表于 2021-10-10 13:50
就是先去掉0 然后把一样的合并再补0就行了应用场景我猜是2048游戏
姐姐说对了,我写的代码就是先把原来数组里的零去掉,生成一个新的数组arrl然后再比较相加
可是代码还是出现了部分数组实现不了相加
页:
[1]