为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

如何在JavaScript中合并两个数组并重复删除项目我有两个JavaScript数组:var array1 = ["Vijendra","Singh"];var array2 = ["Singh", "Shakya"];我希望输出为:var array3 = ["Vijendra","Singh","Shakya"];输出数组应该删除重复的单词。如何在JavaScript中合并两个数组,以便我只按照它们插入原始数组的顺序从每个数组中获取唯一项?
查看完整描述

4 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

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

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.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 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;
    }});


查看完整回答
反对 回复 2019-05-27
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

这是使用扩展运算符和数组泛型的ECMAScript 6解决方案。

目前它只适用于Firefox,可能还适用于Internet Explorer Technical Preview。

但是如果你使用Babel,你现在可以拥有它。

// Input: [ [1, 2, 3], [101, 2, 1, 10], [2, 1] ]// Output: [1, 2, 3, 101, 10]function mergeDedupe(arr){
  return [...new Set([].concat(...arr))];}


查看完整回答
反对 回复 2019-05-27
  • 4 回答
  • 0 关注
  • 1757 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信