2016-05-30 5 views
2

2つの別々の配列のユニークな要素だけを含む新しい配列を返すコードを記述しました。例:[1,2,3]と[1,2]は3を返します。私は作業コードを持っていますが、なぜ '!'javascript .filter()でユニークな要素の新しい配列を返します

function diffArray(arr1, arr2) { 
    return arr1.concat(arr2).filter(function(val){ 
    return !(arr1.indexOf(val) >= 0 && arr2.indexOf(val) >= 0) 
    }); 
} 

diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]); 

が、これにはない:私のreturn文の前に

function diffArray(arr1, arr2) { 
    return arr1.concat(arr2).filter(function(val){ 
    return arr1.indexOf(val) < 0 && arr2.indexOf(val) < 0 
    }); 
} 

diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]); 

私は印象の下にありました '!'式を反転させるだけなので、除外し、 '> ='ではなく '<'を使用すると同じ値が返されます。 De Morgan's lawsによれば

+0

は何を考えてみて'&&'演算子はどうなりますか?あなたは適用を認識します!あなたの表現の向こう側は比較を変えますが、ANDをそのまま残します。 – pvg

答えて

4

、式に相当

!(arr1.indexOf(val) >= 0 && arr2.indexOf(val) >= 0) 

(arr1.indexOf(val) < 0 || arr2.indexOf(val) < 0) 
//      ^^ 
+1

De Morgan refへのリンクありがとうございます。 – Wainage

2

より大きい0でないある

およびBの逆であります

AとBはOR bの

しかし

0に劣っている0

に劣っている私は、これがうまくいくと信じて:

function diffArray(arr1, arr2) { 
    return arr1.concat(arr2).filter(function(val){ 
     return arr1.indexOf(val) < 0 || arr2.indexOf(val) < 0 
    });       /*^^*/ 
} 

diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]); 
関連する問題