仅合并数组(不删除重复项)
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 itemsvar 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 itemsvar 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; }});


