我在javascript中有两个数组 - :
var array1 = ['12','1','10','19','100'];
var array2 = ['12','10','19'];
我需要一种方法从两个数组中获取唯一数据并将它们放在array3中
Array3
应该是 - :
var array3 = ['1','100'];
感谢您的帮助。
答案 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()方法,显然代码更少,更清楚地说明了操作的意图