僅合并數組(不刪除重復項)
ES5版本使用Array.concat
:
var array1 = ["Vijendra","Singh"];var array2 = ["Singh", "Shakya"];var array3 = array1.concat(array2); // Merges both arrays
// [ 'Vijendra', 'Singh', 'Singh', 'Shakya' ]
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.c
oncat(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;
}});