从两个数组中获取唯一值并将它们放在另一个数组中

时间:2013-04-09 21:06:21

标签: javascript arrays

我在javascript中有两个数组 - :

var array1 = ['12','1','10','19','100'];
var array2 = ['12','10','19'];

我需要一种方法从两个数组中获取唯一数据并将它们放在array3中 Array3应该是 - :

var array3 = ['1','100'];

感谢您的帮助。

7 个答案:

答案 0 :(得分:34)

var array3 = array1.filter(function(obj) { return array2.indexOf(obj) == -1; });

阵列#过滤器上的MDN:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/filter

包含旧浏览器的polyfill。

答案 1 :(得分:10)

有了一点ES6魔力,它可以相当简洁。请注意,我们需要检查两种方式,在这两个数组中都有唯一的项目。

const arr1 = [1,2,3,4,5];
const arr2 = [1,3,8];

let unique1 = arr1.filter((o) => arr2.indexOf(o) === -1);
let unique2 = arr2.filter((o) => arr1.indexOf(o) === -1);

const unique = unique1.concat(unique2);

console.log(unique);
// >> [ 2, 4, 5, 8]

答案 2 :(得分:6)

var unique = [];
for(var i = 0; i < array1.length; i++){
    var found = false;

    for(var j = 0; j < array2.length; j++){ // j < is missed;
     if(array1[i] == array2[j]){
      found = true;
      break; 
    }
   }
   if(found == false){
   unique.push(array1[i]);
  }
}

答案 3 :(得分:2)

像这样的东西

var array1 = ['12','1','10','19','100'];
var array2 = ['12','10','19'];
var o = {};
for(var i in array1) {
    o[i] = 1;
}
for(var i in array2) {
    o[i] = 0;
}
var array3 = [];
for(var i in o) {
    if(o[i] == 1) {
        array3.push(i);
    }
}

答案 4 :(得分:1)

babel -d dist/ src/

答案 5 :(得分:0)

与上述类似,但可以使用两个以上的数组

var array1 = ['12','1','10','19','100'];
var array2 = ['12','10','19'];
var i = 0;
var hist = {};
var array3 = [];

buildhist(array1);
buildhist(array2);

for (i in hist) {
    if (hist[i] === 1) {
        array3.push(i);
    }
}

console.log(array3);

function buildhist(arr) {
    var i;
    for (i = arr.length - 1; i >= 0; i--) {
        if (hist[arr[i]] === undefined) {
            hist[arr[i]] = 0;
        }
        hist[arr[i]]++;
    }
}

答案 6 :(得分:0)

var array3 = array1.concat(array2);

array3 = array3.sort(function(a, b) { return a > b; });
array3 = array3.filter(function(num, index) { return num !== array3[index + 1]; });

array3只有唯一值

这也可以在两个循环中完成这项工作非常便宜,应该注意sort()和filter()是ECMA5函数,在旧版浏览器中不受支持,我也经常使用像下划线这样的库,所以我不会# 39; t为我正在处理的每个项目重写这些函数,下划线有一个.unique()方法,显然代码更少,更清楚地说明了操作的意图