如何基于子对象过滤父对象?移除含缺失price产品的餐厅
过滤包含缺失price字段产品的餐厅
要实现这个需求,核心是筛选出旗下所有产品都包含有效price字段的餐厅——只要餐厅里有任何一个产品缺price,就把整个餐厅排除。
基础实现代码
const filteredRestaurants = data.filter(restaurant => { // 检查当前餐厅的所有菜单 return restaurant.multiple_menus.every(menu => { // 检查当前菜单下的所有产品都存在price字段 return menu.products.every(product => 'price' in product && product.price !== undefined); }); });
代码说明
Array.filter():遍历原始餐厅数组,只保留符合条件的元素- 两层
Array.every():确保所有菜单、菜单下的所有产品都满足要求——只要有一个环节不达标,整个餐厅就会被过滤掉 'price' in product && product.price !== undefined:既检查字段存在,也避免字段存在但值为undefined的情况
进阶:严格校验price为有效数字
如果需要确保price是有效的数字(排除null、NaN、字符串等无效值),可以把判断条件改成:
const filteredRestaurants = data.filter(restaurant => { return restaurant.multiple_menus.every(menu => { return menu.products.every(product => { return 'price' in product && typeof product.price === 'number' && !isNaN(product.price); }); }); });
用这段代码处理你提供的示例数据,最终只会剩下「Resturant 2」,因为「Resturant 1」的沙拉菜单里有一个产品缺失price字段。
内容的提问来源于stack exchange,提问作者Ahmed Egeh
相关产品推荐
相关产品推荐

