我有两个 JavaScript 数组:
var array1 = ["Vijendra","Singh"]; var array2 = ["Singh", "Shakya"];
我希望输出为:
var array3 = ["Vijendra","Singh","Shakya"];
输出数组应删除重复的单词。
如何在 JavaScript 中合并两个数组,以便按照插入原始数组的相同顺序从每个数组中获取唯一项?
仅合并数组(不删除重复项)
Array.concat
var array1 = ["Vijendra", "Singh"]; var array2 = ["Singh", "Shakya"]; console.log(array1.concat(array2));
const array1 = ["Vijendra","Singh"]; const array2 = ["Singh", "Shakya"]; const array3 = [...array1, ...array2];
由于没有“内置”方法来删除重复项(ECMA-262实际上对此Array.forEach非常有用),我们必须手动完成:
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循环感到恼火,这里有一种侵入性较小的使用方式:
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
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; } });