在JSON数组中search项目使用节点(最好不要迭代)

目前我收到一个像这样的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}] 

我知道我可以为每个循环做这个,但是,我试图避免这个。 这是目前在Node.JS应用程序的服务器端。

 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}); 

这两个函数都使用数组上的native .filter()方法 。

由于Node实现了EcmaScript 5规范,因此您可以在obj.items上使用Array#filter 。

编辑使用本地方法

 var arrayFound = obj.items.filter(function() { return this.isRight == 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。

你可以试着find预期的结果是使用find函数 ,你可以在下面的脚本中看到结果:

 var jsonItems = {items:[ {itemId:1,isRight:0}, {itemId:2,isRight:1}, {itemId:3,isRight:0} ]} var rta = jsonItems.items.find( (it) => { return it.isRight === 1; } ); console.log("RTA: " + JSON.stringify(rta)); // RTA: {"itemId":2,"isRight":1}