woshijunjun 发表于 2021-10-10 11:46:52

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>


这个代码不满足
    =>

    =>
我实在是改不会了;
越改越迷,
求大哥救救我啊!

kogawananari 发表于 2021-10-10 11:46:53

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的

kogawananari 发表于 2021-10-10 13:01:30

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:09:09

kogawananari 发表于 2021-10-10 13:01
借助正则表达式这个现成的状态机可以直接实现捕获

不过有bug超过了十位数就不行了 你可以改改 思路一样的{:10_331:}

woshijunjun 发表于 2021-10-10 13:27:59

kogawananari 发表于 2021-10-10 13:14
好了 无bug的

看不懂啊,姐姐

kogawananari 发表于 2021-10-10 13:50:09

woshijunjun 发表于 2021-10-10 13:27
看不懂啊,姐姐

就是先去掉0 然后把一样的合并再补0就行了应用场景我猜是2048游戏

woshijunjun 发表于 2021-10-10 14:16:37

kogawananari 发表于 2021-10-10 13:50
就是先去掉0 然后把一样的合并再补0就行了应用场景我猜是2048游戏

姐姐说对了,我写的代码就是先把原来数组里的零去掉,生成一个新的数组arrl然后再比较相加
可是代码还是出现了部分数组实现不了相加
页: [1]
查看完整版本: js问题求助