如何在JavaScript中合并两个数组并去重项
如何在JavaScript中合并两个数组并去重项
我有两个JavaScript数组:
var array1 = ["Vijendra","Singh"]; var array2 = ["Singh", "Shakya"];
我想要的输出是:
var array3 = ["Vijendra","Singh","Shakya"];
输出的数组应该删除重复的单词。
我该如何合并两个JavaScript数组,以便只获取每个数组中的唯一项,并且它们的顺序与它们插入原始数组的顺序相同?
admin 更改状态以发布 2023年5月22日
使用Underscore.js或Lo-Dash,您可以执行以下操作:
console.log(_.union([1, 2, 3], [101, 2, 1, 10], [2, 1]));
仅合并数组(不删除重复项)
ES5版本使用Array.concat
:
var array1 = ["Vijendra", "Singh"]; var array2 = ["Singh", "Shakya"]; array1 = array1.concat(array2); console.log(array1);
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
然后,使用它:
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
对于那些有幸在支持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