2016-08-10 7 views
5

私は2つの配列の配列を持っていて、違いを見つけることを試みています。nodejsのlodash/underscoreを使って2つの配列の違いを見つける方法

c = [[ 2, 21, 27, 30, 33, 40 ], 
    [ 6, 11, 12, 21, 34, 48 ], 
    [ 1, 10, 17, 31, 35, 40 ], 
    [ 1, 18, 26, 33, 36, 45 ], 
    [ 15, 21, 22, 24, 38, 46 ], 
    [ 5, 17, 21, 27, 29, 41 ], 
    [ 3, 7, 12, 16, 20, 28 ], 
    [ 9, 12, 13, 18, 30, 37 ], 
    [ 3, 19, 21, 31, 33, 46 ], 
    [ 6, 11, 16, 18, 20, 34 ], 
    [ 1, 3, 11, 13, 24, 28 ], 
    [ 12, 13, 16, 40, 42, 46 ], 
    [ 1, 3, 5, 36, 37, 41 ], 
    [ 14, 15, 23, 24, 26, 31 ], 
    [ 7, 13, 14, 15, 27, 28 ]]; 

私はアンダースコアしようとした:

_ = require('underscore'); 
_.difference(a,b); 

をしかし、それは動作しません、私が見つけるだろうどのように

var a = [[ 11, 24, 28, 38, 42, 44 ], 
    [ 7, 19, 21, 22, 29, 38 ], 
    [ 2, 21, 27, 30, 33, 40 ], 
    [ 6, 11, 12, 21, 34, 48 ], 
    [ 1, 10, 17, 31, 35, 40 ], 
    [ 1, 18, 26, 33, 36, 45 ], 
    [ 15, 21, 22, 24, 38, 46 ], 
    [ 5, 17, 21, 27, 29, 41 ], 
    [ 3, 7, 12, 16, 20, 28 ], 
    [ 9, 12, 13, 18, 30, 37 ], 
    [ 3, 19, 21, 31, 33, 46 ], 
    [ 6, 11, 16, 18, 20, 34 ], 
    [ 1, 3, 11, 13, 24, 28 ], 
    [ 12, 13, 16, 40, 42, 46 ], 
    [ 1, 3, 5, 36, 37, 41 ], 
    [ 14, 15, 23, 24, 26, 31 ], 
    [ 7, 13, 14, 15, 27, 28 ]]; 

var b = [[ 4, 7, 9, 21, 31, 36 ], 
    [ 2, 5, 6, 12, 15, 21 ], 
    [ 4, 7, 8, 15, 38, 41 ], 
    [ 11, 24, 28, 38, 42, 44 ], 
    [ 7, 19, 21, 22, 29, 38 ]]; 

私も試してみましたlodash:

_ = require('lodash'); 
_.differenceBy(a,b); 

を、それはどちらか動作しません。

私はここで間違っていますか?

+0

は、あなたが適切にアンダースコア/ lodashがインストールされていますか?あなたは彼らがロードされたことを確認しましたか? – Roysh

+0

**はい**私はそれをしました –

+0

あなたは '交差点 'を使ってみましたか? – Roysh

答えて

21

使用_.differenceWith、とのように、二つの配列を比較するコンパレータを渡す:

_.differenceWith(a, b, _.isEqual); 
+0

argの順序は '_differenceBy'と' _.difference'の間で重要であることに注意したいと思います。 '_differenceBy'(lodash)のドキュメントでは、次のように書かれています。 "結果の順序と参照は最初の配列によって決まります。 " いくつかのテストの結果、2番目の配列が長ければ結果の配列に2番目の配列の値がないことに気付きました。ドキュメント内の '_.difference'の例は、' _.difference([2,1]、[2,3])であるという貧しい選択のようです。 // [1] 'を返します。これは、あなたの配列が等長であれば、あなたが '[1,3]'を得る方法が私には不思議です。 – steezeburger

+0

私は同じ問題を抱えていました。その場合(単一レベル配列の場合、 'With'バリアントを避けるため)、' _difference(_ union(a、b)、_.intersection(a、b)) 'で行うことができます。 – dsl101

+1

そして私はちょうど '_.xor()'も発見しました。 https://lodash.com/docs/4.17.4#xor – dsl101

関連する問題