web-dev-qa-db-ja.com

オブジェクトタイプのアンダースコアには(_.contains)が含まれます

Javascriptを使い始めて、Underscoreライブラリを使用しています。 _.containsのような、あらゆる種類のユーティリティ関数があります。これをオブジェクトで機能させる方法はありますか?

var indexes = [ {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'},  {'id': 9, 'name': 'nick'}, {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'} ];

if (_.contains(indexes, {'id':1, 'name': 'jake'})) {
    console.log("contains");
}

それらが示す例のほとんどは、文字列または数字を含む単純な配列を持っています。オブジェクトに_.containsのようなユーティリティ関数を使用するために何ができるのかと思っていました。ありがとう。

39
Crystal

containsでは、値が===と比較可能である必要がありますが、これはオブジェクトの異なるインスタンスでは機能しません。

たとえば、検索するオブジェクトを正確に渡せば機能しますが、あまり役に立ちません。

if (_.contains(indexes, indexes[0])) {

ただし、whereまたはfindWhereを使用できます。

if (_.findWhere(indexes, {'id':1, 'name': 'jake'})) {

findWhereはUnderscore 1.4.4の新機能です。したがって、お持ちでない場合は、whereを使用できます。

if (_.where(indexes, {'id':1, 'name': 'jake'}).length > 0) {
68
loganfsmyth

実際には _。where を使用したいでしょう。

var indexes = [ {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'},  {'id': 9, 'name': 'nick'}, {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'} ];

if (_.where(indexes, {'id':1, 'name': 'jake'}).length) {
    console.log("contains");
}
13
mike