拉丁的傳說(shuō)
2019-05-27 10:51:13
如何在JavaScript中合并兩個(gè)數(shù)組并重復(fù)刪除項(xiàng)目我有兩個(gè)JavaScript數(shù)組:var array1 = ["Vijendra","Singh"];var array2 = ["Singh", "Shakya"];我希望輸出為:var array3 = ["Vijendra","Singh","Shakya"];輸出數(shù)組應(yīng)該刪除重復(fù)的單詞。如何在JavaScript中合并兩個(gè)數(shù)組,以便我只按照它們插入原始數(shù)組的順序從每個(gè)數(shù)組中獲取唯一項(xiàng)?
4 回答

婷婷同學(xué)_
ES5版本使用
TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
僅合并數(shù)組(不刪除重復(fù)項(xiàng))
ES5版本使用Array.concat
:
var array1 = ["Vijendra","Singh"];var array2 = ["Singh", "Shakya"];var array3 = array1.concat(array2); // Merges both arrays // [ 'Vijendra', 'Singh', 'Singh', 'Shakya' ]
ES6版本使用解構(gòu)
const array1 = ["Vijendra","Singh"];const array2 = ["Singh", "Shakya"];const array3 = [...array1, ...array2];
由于沒(méi)有“內(nèi)置”方法來(lái)刪除重復(fù)項(xiàng)(ECMA-262實(shí)際上對(duì)此有用Array.forEach
),我們必須手動(dòng)完成:
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();
這也將保留數(shù)組的順序(即,不需要排序)。
由于許多人對(duì)環(huán)形Array.prototype
和for in
循環(huán)的原型擴(kuò)充感到惱火,因此這是一種使用它的侵入性較小的方法:
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));
對(duì)于那些有幸使用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; }});

蠱毒傳說(shuō)
TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊
這是使用擴(kuò)展運(yùn)算符和數(shù)組泛型的ECMAScript 6解決方案。
目前它只適用于Firefox,可能還適用于Internet Explorer Technical Preview。
但是如果你使用Babel,你現(xiàn)在可以擁有它。
// Input: [ [1, 2, 3], [101, 2, 1, 10], [2, 1] ]// Output: [1, 2, 3, 101, 10]function mergeDedupe(arr){ return [...new Set([].concat(...arr))];}
添加回答
舉報(bào)
0/150
提交
取消