使用 Node 或 ES6 从 JSON 中过滤记录
Posted
技术标签:
【中文标题】使用 Node 或 ES6 从 JSON 中过滤记录【英文标题】:Filter Records from JSON with Node or ES6 【发布时间】:2016-10-14 15:36:42 【问题描述】:我不确定解决此问题的最佳方法。例如,我想迭代我的json
并查找所有在美国的公司。随着我的应用程序的增长,这个JSON
可能会变得更加复杂,例如在关卡、对象等方面。我只想知道人们使用JSON
和Node.js
过滤掉数据子集的简单搜索和/或ES6
或库,例如Lodash
等。
例如这个 json,我有什么方法可以搜索它并只撤回美国的那些公司?
[
"id": 0,
"name": "Company1",
"logoUrl": "/lib/assets/company1-logo.png",
"location":
"country": "USA",
"state": "California",
"city": "Napa"
,
"active": false
,
"id": 1,
"name": "Company2",
"logoUrl": "/lib/assets/company2-logo.png",
"location":
"country": "Germany",
"state": "",
"city": "Berlin"
,
"active": false
,
"id": 2,
"name": "Company3",
"logoUrl": "/lib/assets/company3-logo.png",
"location":
"country": "USA",
"state": "Michigan",
"city": "Detroit"
,
"active": false
]
【问题讨论】:
是的,我知道,但你可以在没有 ES6 的情况下使用节点,我只是说如果你愿意,请使用 ES6,无论哪种方式都没有关系,只是想办法过滤这个 换句话说使用节点中间件来帮助过滤,或者使用普通的JS方法,或者使用你想要的任何想法或建议使用花哨的ES6 【参考方案1】:您可以使用原生过滤功能。
const items = [
"id": 0,
"name": "Company1",
"logoUrl": "/lib/assets/company1-logo.png",
"location":
"country": "USA",
"state": "California",
"city": "Napa"
,
"active": false
,
"id": 1,
"name": "Company2",
"logoUrl": "/lib/assets/company2-logo.png",
"location":
"country": "Germany",
"state": "",
"city": "Berlin"
,
"active": false
,
"id": 2,
"name": "Company3",
"logoUrl": "/lib/assets/company3-logo.png",
"location":
"country": "USA",
"state": "Michigan",
"city": "Detroit"
,
"active": false
]
const usItems = items.filter(v => v.location.country === 'USA')
【讨论】:
【参考方案2】:您可以使用 javascript 的简单 .filter()
方法返回满足过滤器的结果列表。假设您的数据在可变数据中
ES5
data.filter(function(item)
return item.location.country === 'USA';
);
ES6:在 ES6 中,您可以使用箭头函数与
data.filter((item) =>
return item.location.country === 'USA';
);
var data = [
"id": 0,
"name": "Company1",
"logoUrl": "/lib/assets/company1-logo.png",
"location":
"country": "USA",
"state": "California",
"city": "Napa"
,
"active": false
,
"id": 1,
"name": "Company2",
"logoUrl": "/lib/assets/company2-logo.png",
"location":
"country": "Germany",
"state": "",
"city": "Berlin"
,
"active": false
,
"id": 2,
"name": "Company3",
"logoUrl": "/lib/assets/company3-logo.png",
"location":
"country": "USA",
"state": "Michigan",
"city": "Detroit"
,
"active": false
];
var res1 = data.filter(function(item)
return item.location.country === 'USA';
);
const res2 = data.filter((item) =>
return item.location.country === 'USA';
);
console.log(res1);
console.log(res2);
【讨论】:
【参考方案3】:在lodash中会是
_.filter(data, function(item)
return item.location.country === 'USA';
);
【讨论】:
【参考方案4】:使用 JavaScript 原生 Array#filter
方法和 ES6 arrow function
var res = data.filter(v => v.location.country === 'USA');
var data = [
"id": 0,
"name": "Company1",
"logoUrl": "/lib/assets/company1-logo.png",
"location":
"country": "USA",
"state": "California",
"city": "Napa"
,
"active": false
,
"id": 1,
"name": "Company2",
"logoUrl": "/lib/assets/company2-logo.png",
"location":
"country": "Germany",
"state": "",
"city": "Berlin"
,
"active": false
,
"id": 2,
"name": "Company3",
"logoUrl": "/lib/assets/company3-logo.png",
"location":
"country": "USA",
"state": "Michigan",
"city": "Detroit"
,
"active": false
];
var res = data.filter(v => v.location.country === 'USA');
console.log(res);
【讨论】:
该死的,这比我想象的要容易以上是关于使用 Node 或 ES6 从 JSON 中过滤记录的主要内容,如果未能解决你的问题,请参考以下文章
Node v13 / Jest / ES6 — 原生支持没有 babel 或 esm 的模块
将 Node.js 项目从普通 ES6 迁移到 TypeScript
如果 `redux` 不在 package.json 或 package-lock.json 或 node_modules 中,为啥从 'redux' 导入任何东西仍然有效?