web-dev-qa-db-ja.com

Underscorejsでは、配列に別の配列が含まれているかどうかを確認する方法は?

私はこれを持っています

var matches = bookmarks.filter(function(x) {
    return _.contains(x.get("tags"), 'Apple');
});

Appleタグが付いているブックマークオブジェクトを返します

プルする代わりに配列をそこに配置し、一致する値を持つすべてのブックマークをこれに似ています

var matches = bookmarks.filter(function(x) {
    return _.contains(x.get("tags"), ['Apple','orange']);
});

これは機能しません、それを機能させる方法はありますか?

編集:申し訳ありませんが、ブックマークはコレクションであり、Appleとオレンジのタグを持つモデルを返そうとしています

22
user240993

tagsが文字列の場合、コードは次のようになります

return _.indexOf(x.get("tags"), ['Apple','orange']) > -1;

IndexOfの例: jsFiddle

tagsが配列の場合、intersectionを使用できます

return _.intersection(['Apple','orange'], x.get("tags")).length > 0;

交差の例: jsFiddle

26
epascarello

アンダースコアにはそのための関数はないようです。ただし、他の機能を簡単に組み合わせてこれを実現できます。

_.mixin({
  containsAny: function(arr, values) {
    // at least one (.some) of the values should be in the array (.contains)
    return _.some(values, function(value) {
      return _.contains(arr, value);
    });
  }
});
5
pimvdb