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

我有两个JavaScript数组:

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

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

我希望输出为:

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

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

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

回答:

仅合并数组(不删除重复项)

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.prototypefor 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;

}

});

以上是 如何在JavaScript中合并两个数组并删除重复项 的全部内容, 来源链接: utcz.com/qa/410028.html

回到顶部