目前我收到像这样的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应用程序的当前服务器端。
答案 0 :(得分:23)
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()
method。
答案 1 :(得分:3)
由于Node实现了EcmaScript 5规范,因此您可以在obj.items
上使用Array#filter。
答案 2 :(得分:2)
看看http://underscorejs.org 这是一个很棒的图书馆。
答案 3 :(得分:2)
编辑使用本机方法
var arrayFound = obj.items.filter(function() {
return this.isRight == 1;
});
答案 4 :(得分: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上。
答案 5 :(得分:1)
您可以尝试使用find function查找预期结果,您可以在以下脚本中看到结果:
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}