1

マングースのObjectIdまたはそれらの文字列値を比較するのに問題があります。

私は2つの配列を持っています、最初は:

a = [
"50dfb24123c43a501400000e",
"50d1bda330eb531c1400000d",
"50d1bdcf30eb531c1400000f",
"50d1beac30eb531c14000012",
"50dfb26223c43a501400000f"
]

そして2番目は:

b = [
"50dfb26223c43a501400000f"
]

実行すると、の値の代わりに_.intersection(a,b)空の配列が表示されます。[]b

aとbの値は_.pluck、マングースモデルによって返された結果から取得されます。各配列値を文字列に変換しようとしましたが、空の配列でも同じ結果が得られます。

同様の質問を検索しましたが、見つけた解決策は役に立ちません(つまり、文字列への変換)。

足りないものはありますか?上に貼り付けたように生の配列を交差させると正しい結果が得られるため、問題はマングースObjectIdsであることがわかっています。

ありがとう

4

3 に答える 3

6

lodash4では、これを実行できるようになりました。

_.intersectionWith(a, b, _.isEqual)
于 2016-03-04T16:35:30.830 に答える
1

この場合、要素の内容を比較するのではなく、単純な参照等式を使用して要素を比較するため、sの_.intersection配列で使用することはできません。2つのが等しいかどうかを比較するには、このメソッドを使用する必要があります。ObjectIdintersectionObjectIdObjectId.equals

したがって、最も簡単な解決策は、配列を文字列に変換して機能するようにすることintersectionです。あなたがそれを試したと言ったのは知っていますが、それはうまくいくので、おそらくどこかにバグがありました。

于 2013-01-05T16:42:33.563 に答える
1

_.isEqual(object、other)を使用して、2つのマングースObjectIDが同じ内容であるかどうかをテストできます。

例えば、

var ret=[];
_.each(b,function(x){
    ret.push(_.filter(a,function(y){
        return _.isEqual(x,y);
    }))
})

これで、マングースのObjectIdのデータ型として「50dfb26223c43a501400000f」を含むretを取得する必要があります。

于 2013-09-05T06:22:28.620 に答える