如何比较这两个数组并根据Array2中是否存在Array1中的任何数字创建一个新数组(已过滤)。两个阵列都是动态的,可以有不同的长度。
Array1 = 3796, 3831, 3858, 3860
Array2 = 3796, 4566, 2932, 3831, 3290, 3858, 4599, 3293 etc etc..
在这种情况下,我希望我的输出为:
Array3 = 4566, 2932, 3290, 4599, 3293
答案 0 :(得分:0)
我假设您正在比较普通数组。如果不是,则需要将for循环更改为.. in循环。
function arr_diff(a1, a2)
{
var a=[], diff=[];
for(var i=0;i<a1.length;i++)
a[a1[i]]=true;
for(var i=0;i<a2.length;i++)
if(a[a2[i]]) delete a[a2[i]];
else a[a2[i]]=true;
for(var k in a)
diff.push(k);
return diff;
}
function
将返回array
difference of the two arrays
答案 1 :(得分:0)
你可以试试这个:
function in_array(needle, haystack){
for (var i = 0; i < haystack.length; i++){
if (needle == haystack[i]) return true;
}
return false;
}
for (var i = 0; i < array1.length; i++){
if (!in_array(array1[i], array2){
var index = array1.indexOf(array1[i]);
array1.splice(index, 1);
}
}
我还没有测试过,但我想它应该有用。
答案 2 :(得分:0)
这可能是最短的解决方案:
function diff(a, b) {
var c = [].slice.call(a.length > b.length ? a : b); // clone the longest array
return c.filter(function(c) { return a.indexOf(c) < 0 }); // filter out intersects
}
var a = [3796, 3831, 3858, 3860],
b = [3796, 4566, 2932, 3831, 3290, 3858, 4599, 3293];
console.log( diff(a, b) ); // [4566, 2932, 3290, 4599, 3293]