2016-07-27 10 views
0

配列2の各要素を持つ配列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配列が含まれていれば、これは – 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 t 2016)* –

+0

はい、ecmascript 2016で...ブラウザは100%ecmascript 2015ではありません。だからこそ、ecmascript 2020にジャンプしましょう:p –

+0

これは単なる方法です。蒸散器を使用しなくても簡単にパッチを適用できます。 –

1

!~を使うずっと簡単な方法は、次のようになります。

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

0 ... nはfalse、-1はtrueになるため動作しません –

+0

まだ動作しません。あなたが 'return!(array2.indexOf(item)> = 0);を入れれば、そのトリックを行うべきです。 – romellem

+0

セクシーな人は '!〜'を使用 –

0

あなたはindexOf()を使用することができますarray2アイテムがにあるかどうかを確認するES6で

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

、あなたはそれのためにSetを使用することができます:は、唯一それがある場合filteredArrayに追加します。

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);

関連する問題