我有两个JavaScript数组:
var array1 = ["Vijendra","Singh"];
var array2 = ["Singh", "Shakya"];
我希望输出为:
var array3 = ["Vijendra","Singh","Shakya"];
输出数组应删除重复的单词。
如何在JavaScript中合并两个数组,以便从每个数组中只获得唯一的项目,其顺序与它们插入原始数组的顺序相同?
我有两个JavaScript数组:
var array1 = ["Vijendra","Singh"];
var array2 = ["Singh", "Shakya"];
我希望输出为:
var array3 = ["Vijendra","Singh","Shakya"];
输出数组应删除重复的单词。
如何在JavaScript中合并两个数组,以便从每个数组中只获得唯一的项目,其顺序与它们插入原始数组的顺序相同?
当前回答
取两个数组a和b
var a = ['a','b','c'];
var b = ['d','e','f'];
var c = a.concat(b);
//c is now an an array with: ['a','b','c','d','e','f']
其他回答
Array.prototype.merge = function(/* variable number of arrays */){
for(var i = 0; i < arguments.length; i++){
var array = arguments[i];
for(var j = 0; j < array.length; j++){
if(this.indexOf(array[j]) === -1) {
this.push(array[j]);
}
}
}
return this;
};
一个更好的数组合并函数。
可以使用新的“集”删除重复
[...new Set([...array1 ,...array2])]
您可以合并结果并过滤重复项:
let combinedItems = [];
// items is an Array of arrays: [[1,2,3],[1,5,6],...]
items.forEach(currItems => {
if (currItems && currItems.length > 0) {
combinedItems = combinedItems.concat(currItems);
}
});
let noDuplicateItems = combinedItems.filter((item, index) => {
return !combinedItems.includes(item, index + 1);
});
只需使用Undercore.js的=>uniq即可实现:
array3 = _.uniq(array1.concat(array2))
console.log(array3)
它将印刷[“Vijendra”、“Singh”、“Shakya”]。
我在尝试做同样的事情时遇到了这个帖子,但我想尝试一些不同的东西。我刚刚完成了下面的功能。我还有另一个变量“compareKeys”(键数组),用于进行浅对象比较。我将来可能会把它改成一个函数。
无论如何,我没有包括那部分,因为它不适用于这个问题。我还将代码放入jsperf中。编辑:我修复了jsperf中的条目。与140k相比,我的函数的运算速度约为99k次/秒。
对于代码:我首先创建一个可用索引数组,然后通过迭代第一个数组来消除它们。最后,我通过使用两个数组之间不匹配的缩减索引数组来插入“剩余部分”。
http://jsperf.com/merge-two-arrays-keeping-only-unique-values/26
function indiceMerge(a1, a2) {
var ai = [];
for (var x = 0; x < a2.length; x++) {
ai.push(x)
};
for (var x = 0; x < a1.length; x++) {
for (var y = 0; y < ai.length; y++) {
if (a1[x] === a2[ai[y]]) {
ai.splice(y, 1);
y--;
}
}
}
for (var x = 0; x < ai.length; x++) {
a1.push(a2[ai[x]]);
}
return a1;
}