javascript – 删除数组上的相邻重复项

发布时间:2020-09-30 发布网站:编程之家
编程之家收集整理的这篇文章主要介绍了javascript – 删除数组上的相邻重复项编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我们有一组数字,如下一个:

const input = [2,2,3,1,1];

目标是删除重复值,但前提是它们相邻.因此,上一个样本的预期输出应为:

[2,1]

到目前为止,我设法使用递归方法解决了这个问题,但由于某些原因我无法想象,生成的结果不会返回(但是,您可以在返回条件之前在控制台日志中看到它).

const input = [2,1];

const remAdjDups = (arr,output = []) =>
{
    if (!arr.length)
    {
        console.log("Result before return: ",output);
        return output;
    }

    if (arr[0] === arr[1])
    {
        arr.splice(1,1);
        remAdjDups(arr,output);
    }
    else
    {
        remAdjDups(arr.slice(1),output.concat(arr[0]));
    }
}

let out = remAdjDups(input.slice());
console.log("output: ",out);

首先,主要是,我想了解我的方法发生了什么,其次我对任何其他方法(任何类型)都可以解决这个问题.

更新方案

万一有人感兴趣,我终于以这种方式使用递归解决了这个问题.我知道过滤器解决方案是短路和优雅的,但我通过递归训练解决.

const input = [2,1];

const remAdjDups = ([x,y,...rest],out = []) =>
{
    if (!rest.length)
        return (x === y) ? [...out,x] : [...out,x,y];
    else if (x === y)
        return remAdjDups([x,out);
    else
        return remAdjDups([y,[...out,x]);
}

let out = remAdjDups(input.slice());
console.log("output: ",out);

解决方法

关于你的解决方案,只需在remAdjDups之前添加return(arr …

附:

我用了Array.prototype.filter

const input = [2,1];

const result = input.filter((i,idx) => input[idx-1] !== i)

console.log(result)

总结

以上是编程之家为你收集整理的javascript – 删除数组上的相邻重复项全部内容,希望文章能够帮你解决javascript – 删除数组上的相邻重复项所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!