2016-07-27 77 views
0

我需要过滤数组1中的每个元素。两个数组都可以有随机数的元素。Javascript,用数组过滤数组

array1 = [1,2,3,4,5]; 
array2 = [1,3,5]; 
filteredArray = []; 

array2.forEach(function(x){ 
    filteredArray = array1.filter(function(y){ 
    return y !== x; 
    }); 
}); 
return filteredArray; 
//should return -> [2,4] 
// returns [1,2,3,4] 

如何过滤一个数组与另一个数组中的所有元素?

+0

http://stackoverflow.com/questions/1181575/determine -whether-an-array-contained-a-value - 你可以使用这个 – RaV

回答

2

使用数组的indexOf方法

var array1 = [1,2,3,4,5]; 
var array2 = [1,3,5]; 
var filteredArray = array1.filter(function(x) { 
    return array2.indexOf(x) < 0; 
}); 

,或者对于性感的人,用!~indexOf

var array1 = [1,2,3,4,5]; 
var array2 = [1,3,5]; 
var filteredArray = array1.filter(function(x) { 
    return !~array2.indexOf(x); 
}); 
+0

'!array2.includes(x)'*(ECMAScrip吨2016)* – 2016-07-27 14:22:50

+0

是的,与ecmascript 2016年...没有浏览器是100%ecmascript 2015年,那么,地狱,让我们跳转到ecmascript 2020:p –

+0

这只是一种方法。即使没有翻译,修补也很容易。 – 2016-07-27 14:26:25

1

一个更简单的方法是:

var filteredArray = array1.filter(function(item) { 
    return !(array2.indexOf(item) >= 0); 
}); 
+0

,不会工作,因为0 ... n应该导致错误,-1在真 –

+0

仍然无法正常工作。如果你把'return!(array2.indexOf(item)> = 0);'这应该做的伎俩。 – romellem

+0

性感的人使用'!〜' –

0

您可以使用indexOf()检查array2项目是否在中那么只有将其添加到filteredArray如果是:

array1 = [1,2,3,4,5]; 
array2 = [1,3,5]; 
filteredArray = []; 

array2.forEach(function(x){ 
    if (array1.indexOf(array2[x] > -1) { 
     filteredArray.push(array2[x]); 
    } 
}); 
return filteredArray; 
1

array1 = [1, 2, 3, 4, 5]; 
 
array2 = [1, 3, 5]; 
 
filteredArray = []; 
 

 
filteredArray = array1.filter(function (y) { 
 
\t \t return array2.indexOf(y) < 0; 
 
\t }); 
 
console.log(filteredArray);

0

在ES6,你可以使用Set它。

var array1 = [1, 2, 3, 4, 5], 
 
    array2 = [1, 3, 5], 
 
    filteredArray = array1.filter((set => a => !set.has(a))(new Set(array2))); 
 

 
console.log(filteredArray);

+0

我们可以让它更加复杂..!如何'filteredArray = array1.filter(function(set,a){return!set.has(a)}。bind(null,new Set(array2)));'..? – Redu

+0

在这种情况下,你可以使用'new Set(...)'作为这个参数。 –

0

所有indexOf不玩耍,我也变傻......

var array1 = [1,2,3,4,5], 
 
    array2 = [1,3,5], 
 
    filtered = array1.filter(e => !array2.includes(e)); 
 
console.log(filtered);