javascript - JavaScript 数组过滤和映射问题。如何进行嵌套过滤?
问题描述
假设,我有一个数组。
const arr = [
{
category: 'Diner',
item: [
{name: 'Chicken Rice', price: 200},
{name: 'Mutton Rice', price: 300},
],
},
{
category: 'Breakfast',
item: [
{name: 'Tea Bisuit', price: 100},
{name: 'Bread Butter', price: 300},
{name: 'Green Tea', price: 80},
],
},
];
如何根据项目名称过滤数组?例如,如何过滤项目名称为Green Tea的数组?
输出必须是这样的:
arr = [
{
category: 'Breakfast',
item: [
{name: 'Green Tea', price: 80},
],
},
];
解决方案
您可以map
通过arr
每个元素过滤item
与该术语匹配的
之后,filter
再次arr
拒绝item
为空的元素
const arr = [ { category: "Diner", item: [ { name: "Chicken Rice", price: 200 }, { name: "Mutton Rice", price: 300 }, ], }, { category: "Breakfast", item: [ { name: "Tea Bisuit", price: 100 }, { name: "Bread Butter", price: 300 }, { name: "Green Tea", price: 80 }, ], }, ]
const term = "Green Tea"
const res = arr
.map((categoryAndItems) => ({
category: categoryAndItems.category,
item: categoryAndItems.item.filter((item) => item.name === term),
}))
.filter((categoryAndItems) => categoryAndItems.item.length > 0)
console.log(res)
推荐阅读
- python - python / networkx有向图中的单独边箭头
- javascript - 如何使用 Moment javascript 将日期 22/04/2020 转换为 Epoch 时间戳
- java - 自定义反序列化器将字符串映射到布尔值
- regex - 有没有办法在单个语句中将某个函数的返回值编译成正则表达式?
- go - 获取“未导出字段的隐式分配”
- python - 类中没有 __iter__ 方法的迭代器协议的实现
- javascript - 一个 div 内的按钮会影响不同的 div -- 在 Chrome 浏览器中
- java - Feign客户端异常feign.codec.DecodeException:类型不是Class或ParameterizedType的实例:T
- reactjs - 每次输入内容时功能组件都会重新渲染
- reactjs - Reactjs 中渲染 jsxVarible 和 jsxComponet 的区别