web-dev-qa-db-ja.com

アンダースコアを使用して、オブジェクトの配列にキー値があるかどうかを確認します

アンダースコアを使用して、オブジェクトの配列にキー値があるかどうかを確認するにはどうすればよいですか。

例:

var objects = [
  {id:1, name:'foo'},
  {id:2, name:'bar'}
]

check(objects, {name: foo}) // true

私はそれが地図を使用して作られるべきだと思います:

_.map(objects, function(num, key){ console.log(num.name) });
14
underscore666

findhttp://underscorejs.org/#find を使用します

var check = function (thelist, props) {
    var pnames = _.keys(props);
    return _.find(thelist, function (obj) {
        return _.all(pnames, function (pname) {
            return obj[pname] == props[pname];
        });
    });
};
2
Marcin

これには some を使用できます。

check = objects.some( function( el ) {
    return el.name === 'foo';
} );

関数がcheckを1回返した場合、truetrueです。それ以外の場合は、falseです。

ただし、IE7/8ではサポートされていません。シムのMDNリンクを見ることができます。

アンダースコアライブラリの場合も実装されているようです(エイリアスは any です)。例:

check = _.some( objects, function( el ) {
    return el.name === 'foo';
} );
48