11

現在、次のような JSON 応答が返されます...

{items:[
  {itemId:1,isRight:0},
  {itemId:2,isRight:1},
  {itemId:3,isRight:0}
]}

このようなことを実行したい(疑似コード)

var arrayFound = obj.items.Find({isRight:1})

これはその後返されます

[{itemId:2,isRight:1}]

for each ループでこれを実行できることはわかっていますが、これを回避しようとしています。これは現在、Node.JS アプリのサーバー側です。

4

6 に答える 6

25
var arrayFound = obj.items.filter(function(item) {
    return item.isRight == 1;
});

もちろん、オブジェクト リテラルを条件としてアイテムを検索する関数を作成することもできます。

Array.prototype.myFind = function(obj) {
    return this.filter(function(item) {
        for (var prop in obj)
            if (!(prop in item) || obj[prop] !== item[prop])
                 return false;
        return true;
    });
};
// then use:
var arrayFound = obj.items.myFind({isRight:1});

どちらの関数も、配列でネイティブ.filter()メソッドを使用します。

于 2012-08-06T21:26:43.423 に答える
3

Node は EcmaScript 5 仕様を実装しているため、Array#filter onを使用できますobj.items

于 2012-08-06T21:27:30.050 に答える
2

ネイティブメソッドを使用するように編集

var arrayFound = obj.items.filter(function() { 
    return this.isRight == 1; 
});
于 2012-08-06T21:28:53.043 に答える
2

http://underscorejs.orgをご覧ください 。これは素晴らしいライブラリです。

http://underscorejs.org/#filter

于 2012-08-06T21:17:17.060 に答える
1

実際、mongoDB を使用してドキュメントを永続化する場合は、さらに簡単な方法を見つけました...

findDocumentsByJSON = function(json, db,docType,callback) {
  this.getCollection(db,docType,function(error, collection) {
    if( error ) callback(error)
    else {
      collection.find(json).toArray(function(error, results) {
        if( error ) callback(error)
        else
          callback(null, results)
      });
    }
  });
}

次に、{isRight:1} をメソッドに渡し、オブジェクトの配列のみを返すことができます。これにより、有能な mongo に重労働を任せることができます。

于 2012-08-08T15:07:32.647 に答える