在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}
- Javascript – 无法确定JSON对象是否包含true
- node.js xmlhttp获取请求getaddrinfor ENOTFOUND错误
- Node.js REST API从MongoDB中获取数据
- 转到另一个url,无需重新加载页面
- Express,Mongoose – .update()返回null
- Heroku(Cedar)+ Node + Express + Jade子目录中的客户端JavaScript文件在工作时使用foreman + curl,但是当推送到Heroku时
- 来自AngularJS的NodeJS HTTP请求
- Mongoose查询callback不会在NodeJS cronjob中调用
- 导入到Node.js的TypeScript文件没有被名称空间部分声明识别的包?