鱼C论坛

 找回密码
 立即注册
查看: 4163|回复: 6

[已解决]js问题求助

[复制链接]
发表于 2021-10-10 11:46:52 | 显示全部楼层 |阅读模式
1鱼币

根据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]
我实在是改不会了;
越改越迷,
求大哥救救我啊!
最佳答案
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[0] << 1) + ",0,0,0,0").split(',').map(v => 1 * v).slice(0,4) 
}

console.log(foo([64, 128, 2, 2]))
好了 无bug的

最佳答案

查看完整内容

好了 无bug的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[0] << 1) + ",0,0,0,0").split(',').map(v => 1 * v).slice(0,4) 
}

console.log(foo([64, 128, 2, 2]))
好了 无bug的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-10 13:01:30 | 显示全部楼层
function foo(arr) {
    const s = arr.filter(v => v !== 0).join('')
    return (s.replace(/(.)\1/g, w => w[0] << 1) + "0000").substr(0, 4).split('').map(v => 1 * v)
}

console.log(foo([2, 2, 2, 2]))
console.log(foo([2, 0, 2, 2]))
console.log(foo([2, 4, 2, 2]))
console.log(foo([2, 4, 4, 2]))
console.log(foo([0, 2, 0, 2]))

借助正则表达式这个现成的状态机可以直接实现捕获
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-10 13:09:09 | 显示全部楼层
kogawananari 发表于 2021-10-10 13:01
借助正则表达式这个现成的状态机可以直接实现捕获

不过有bug  超过了十位数就不行了 你可以改改 思路一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-10 13:27:59 | 显示全部楼层

看不懂啊,姐姐
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-10 13:50:09 | 显示全部楼层

就是先去掉0 然后把一样的合并再补0就行了  应用场景我猜是2048游戏
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-10 14:16:37 | 显示全部楼层
kogawananari 发表于 2021-10-10 13:50
就是先去掉0 然后把一样的合并再补0就行了  应用场景我猜是2048游戏

姐姐说对了,我写的代码就是先把原来数组里的零去掉,生成一个新的数组arrl然后再比较相加
可是代码还是出现了部分数组实现不了相加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 18:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表