使用节点在 JSON 数组中搜索项目(最好不迭代)
Searching for items in a JSON array Using Node (preferably without iteration)
目前我得到这样的 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 每个循环来做到这一点,但是,我试图避免这种情况。这目前是 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});
这两个函数都使用数组上的本机.filter()
方法。
由于 Node 实现了 EcmaScript 5 规范,因此您可以在obj.items
上使用 Array#filter 。
看看 http://underscorejs.org这是一个很棒的图书馆。
http://underscorejs.org/#filter
编辑为使用本机方法
var arrayFound = obj.items.filter(function() {
return this.isRight == 1;
});
你可以尝试使用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}
实际上,
如果您使用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 上。
相关文章:
- 如何通过迭代对象数组来删除某些项目
- 为什么我的jQuery .每次迭代都无法使用每个项目的属性
- 使用节点在 JSON 数组中搜索项目(最好不迭代)
- "搜索并销毁“;迭代不会'不要一次删除所有项目
- AngularJS Ng-Repeat不迭代$Scope中的项目
- 如何在角度UI树中获取某个项目的键值或迭代
- 如何使用 Javascript 将迭代器索引号附加到数组中的每个项目
- 在 6 次迭代的步长中每三个项目更改一次
- AngularJs:错误:用于配对项目的自定义筛选器引发错误:“达到 10 次 $digest() 迭代.流产!
- 循环(将项目存储在集合中)似乎迭代的次数比它应该的次数少
- 在 Angular 项目中迭代 JSON 响应以创建新的 $scope obj 我可以在应用程序中使用的
- 动态确定项目的迭代-Rally SDK 1.33
- 最快的方式通过数组多次迭代,同时删除项目
- JavaScript:使用一个对象在数组上迭代并跟踪项目频率
- 如何迭代项目I'我用jquery选择了
- Angular ng重复每次迭代多个项目
- 画布游戏-存储/计算位置/迭代粒子/项目符号/游戏元素的最有效方法
- 在AngularFire中迭代项目列表时,如何获取每个项目的ID
- 单击一起处理迭代中的所有项目 - AngularJS
- 从数组中删除项目而不迭代