[英]javaScript filter nested objects and arrays
我使用的情况是这样的。
menu
dish_has_categories
dish_has_categories
数组中,如果存在CategoryId等于8
的对象,我想过滤掉该根对象。 我的原始数据对象
const data = [{ menuName: "Hot dogs", menu: [ { dishId: '1', dish_has_categories: [{ CategoryId: '8' }] }, { dishId: '2', dish_has_categories: [{ CategoryId: '9' }] }] }, { menuName: "Burgers", menu: [{ dishId: '3', dish_has_categories: [{ CategoryId: '6' }] }, { dishId: '4', dish_has_categories: [{ CategoryId: '4' }] }] }, { name: "Drinks", menu: [] } ]
我的预期结果是
[{ menuName: "Hot dogs", menu: [ { dishId: '1', dish_has_categories: [{ CategoryId: '8' }] }, { dishId: '2', dish_has_categories: [{ CategoryId: '9' }] }] }]
我到目前为止所做的是
const data2 = data.filter(element => {
return element.menu.length > 0
})
我不知道如何在嵌套对象和数组内部进行深度过滤。 希望我的问题是清楚你所有。
您可以使用带有嵌套some()
filter()
some()
。
some()
方法测试数组中的至少一个元素是否通过了由提供的函数实现的测试。 它返回一个布尔值
const data = [{ menuName: "Hot dogs", menu: [ { dishId: '1', dish_has_categories: [{ CategoryId: '8' }] }, { dishId: '2', dish_has_categories: [{ CategoryId: '9' }] }] }, { menuName: "Burgers", menu: [{ dishId: '3', dish_has_categories: [{ CategoryId: '6' }] }, { dishId: '4', dish_has_categories: [{ CategoryId: '4' }] }] }, { name: "Drinks", menu: [] } ] const res = data.filter(x => x.menu.some(y => y.dish_has_categories.some(z => z.CategoryId === '8') ) ); console.log(res)
这里嵌套一些用来检查是否有任何dish_has_categories
已经CategoryId
等于'8'
,如果是true
那么我们包括在最终输出菜单,否则我们不
const data =[{ menuName: "Hot dogs", menu: [ { dishId: '1', dish_has_categories: [{ CategoryId: '8' }] }, { dishId: '2', dish_has_categories: [{ CategoryId: '9' }] }] }, { menuName: "Burgers", menu: [{ dishId: '3', dish_has_categories: [{ CategoryId: '6' }] }, { dishId: '4', dish_has_categories: [{ CategoryId: '4' }] }] }, { name: "Drinks", menu: [] } ] let op = data.filter(val => { let menu = val.menu.some(({dish_has_categories}) => dish_has_categories.some(({CategoryId}) => CategoryId === '8')) return menu }) console.log('filtered values -->\\n',op) let names = op.map(({menuName})=> menuName) console.log('Names --> \\n', names)
您可以使用javascript filter()
和some()
。 some()
方法检查数组中的任何元素是否通过该函数。
let data2 = data.filter(element => {
let menu = element.menu.some(({dish_has_categories}) => dish_has_categories.some(({CategoryId}) => CategoryId === '8'));
return menu;
});
console.log(data2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.