我有两个JavaScript数组:

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

我希望输出为:

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

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

如何在JavaScript中合并两个数组,以便按照插入原始数组的顺序从每个数组中只获取唯一的项?

推荐答案

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

ES5 version use Array.concat:

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

console.log(array1.concat(array2));

ES6 version use destructuring

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相关问答推荐

如何制作删除按钮以从列表中删除该项目所属的项目?

在HTML中使用脚本变量作为背景图像源

我的glb文件没有加载到我的three.js文件中

如何在mongoose中链接两个模型?

康威的生活游戏规则在我的Javascript版本中不起作用.''我做错了什么?

空的结果抓取网站与Fetch和Cheerio

将本机导航路由react 到导航栏中未列出的屏幕?

查找最长的子序列-无法重置数组

如何通过使用vanilla JS限制字体大小增加或减少两次来改变字体大小

Javascript json定制

我可以使用使用node.js创建的本地主机来存储我网站上提交的所有数据吗?没有SQL或任何数据库.只有HTML语言

在Reaction中的handleSubmit按钮内,useSelector值仍然为空

同一类的所有div';S的模式窗口

为什么可选参数的顺序会导致问题?

输入的值的类型脚本array.排序()

通过跳过某些元素的对象进行映射

为什么我看到的是回复,而不是我的文档?

为什么我的Navbar.css没有显示在本地主机页面上?

Chrome上的印度时区名S有问题吗?

如何阻止外部脚本进入顶层导航