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

新手上路,请多包涵

我有两个 JavaScript 数组:

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

我希望输出为:

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

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

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

原文由 Vijjendra 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

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

ES5 版本使用 Array.concat

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

 array1 = array1.concat(array2);

 console.log(array1);

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

原文由 LiraNuna 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题