开发者社区> 问答> 正文

如何在JavaScript中合并两个数组并删除重复项

我有两个JavaScript数组:

var array1 = ["Vijendra","Singh"]; var array2 = ["Singh", "Shakya"];

我希望输出为:

var array3 = ["Vijendra","Singh","Shakya"];

输出数组应删除重复的单词。

如何在JavaScript中合并两个数组,以使每个数组中的唯一项按插入原始数组中的相同顺序获得?

展开
收起
保持可爱mmm 2020-01-08 17:18:48 572 0
1 条回答
写回答
取消 提交回答
  • 仅合并数组(不删除重复项) ES5版本使用Array.concat:

    var array1 = ["Vijendra", "Singh"]; var array2 = ["Singh", "Shakya"];

    console.log(array1.concat(array2));

    ES6版本使用解构

    const array1 = ["Vijendra","Singh"]; const array2 = ["Singh", "Shakya"]; const array3 = [...array1, ...array2];

    由于没有“内置”方式来删除重复项(ECMA-262实际上有Array.forEach这样做的好处),因此我们必须手动进行:

    Array.prototype.unique = function() { var a = this.concat(); for(var i=0; i<a.length; ++i) { for(var j=i+1; j<a.length; ++j) { if(a[i] === a[j]) a.splice(j--, 1); } }

    return a;
    

    };

    然后,使用它:

    var array1 = ["Vijendra","Singh"]; var array2 = ["Singh", "Shakya"]; // Merges both arrays and gets unique items var array3 = array1.concat(array2).unique();

    这也将保留数组的顺序(即无需排序)。

    由于许多人都对Array.prototype和for in循环的原型扩展感到烦恼,因此以下是一种使用它的侵入性较小的方法:

    function arrayUnique(array) { var a = array.concat(); for(var i=0; i<a.length; ++i) { for(var j=i+1; j<a.length; ++j) { if(a[i] === a[j]) a.splice(j--, 1); } }

    return a;
    

    }

    var array1 = ["Vijendra","Singh"]; var array2 = ["Singh", "Shakya"]; // Merges both arrays and gets unique items var array3 = arrayUnique(array1.concat(array2));

    对于那些幸运地使用ES5可用的浏览器的人,可以这样使用Object.defineProperty:

    Object.defineProperty(Array.prototype, 'unique', { enumerable: false, configurable: false, writable: false, value: function() { var a = this.concat(); for(var i=0; i<a.length; ++i) { for(var j=i+1; j<a.length; ++j) { if(a[i] === a[j]) a.splice(j--, 1); } }

        return a;
    }
    

    });

    问题来源于stack overflow

    2020-01-08 17:19:27
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载