json - 在 JSON 中查找列表中项目的出现次数
问题描述
我一直在关注我拥有他们汽车制造商的 JSON。lodash 中是否有更好的方法可以从预定义的列表中获取汽车制造商的数量。
例如,
{
"data": [
{"ownerId":"00001", "make": "Honda"},
{"ownerId":"00002", "make": "Nissan"},
{"ownerId":"00003", "make": "Audi"},
{"ownerId":"00004", "make": "Porsche"},
{"ownerId":"00005", "make": "Honda"},
{"ownerId":"00006", "make": "Honda"},
{"ownerId":"00007", "make": "Audi"},
{"ownerId":"00008", "make": "Volkswagen"},
{"ownerId":"00009", "make": "Honda"},
{"ownerId":"00010", "make": "Porsche"},
{"ownerId":"00011", "make": "Volkswagen"}
]
}
计算计数的过滤器列表:
["Honda", "Audi", "Porsche"]
预期结果:
[{"Audi": 2}, {"Honda": 4}, {"Porsche": 2}]
输入 JSON 中还有其他汽车制造商,但由于过滤器列表没有,因此未考虑。
解决方案
您可以使用_.countBy()
获取每个品牌的计数和对象,然后_.pick()
是您想要的项目:
const cars = {"data":[{"ownerId":"00001","make":"Honda"},{"ownerId":"00002","make":"Nissan"},{"ownerId":"00003","make":"Audi"},{"ownerId":"00004","make":"Porsche"},{"ownerId":"00005","make":"Honda"},{"ownerId":"00006","make":"Honda"},{"ownerId":"00007","make":"Audi"},{"ownerId":"00008","make":"Volkswagen"},{"ownerId":"00009","make":"Honda"},{"ownerId":"00010","make":"Porsche"},{"ownerId":"00011","make":"Volkswagen"}]};
const list = ["Honda", "Audi", "Porsche"];
const result = _.pick(_.countBy(cars.data, 'make'), ["Honda", "Audi", "Porsche"]);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
推荐阅读
- javascript - Loopback 4 测试前的空数据库
- ios - 如果变量相等,则遍历两个自定义数组并设置值 Swift
- reactjs - jsdoc中的React导入tsint星号必须对齐
- java - 使用“yyyy-MM-dd hh:mm:ss”模式解析日期
- android - errorBody() 预期 BEGIN_ARRAY
- python - 使用类中定义的方法/属性/函数的通用语法。(Python文档没有给出如何使用它们的例子)
- typescript - 为什么在 vue.js 中使用 axios 时出现 typescript 错误“元素隐含类型为 'any',因为 axios 元素没有索引签名
- mysql - 布尔字段索引以删除分区表中的记录
- vagrant - Vagrant - 在配置期间注销并重新登录而不会丢失配置状态
- selenium - 在 PATH 中找不到 firefox 二进制文件。确保已安装 Firefox。操作系统似乎是:WIN10