2016-07-27 52 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);