JavaScript如何遍历嵌套对象筛选价格高于指定值的可售菜品
JS嵌套遍历实现符合条件的菜品筛选
针对有Python开发基础的使用者,整个遍历逻辑和你熟悉的多层嵌套for循环完全等价,只需要顺着给定的对象层级逐层访问、加判断即可,不需要复杂的语法。
核心数据层级梳理
先明确待遍历对象的访问路径,避免遍历错位:
- 最外层菜单对象的核心数据入口是
foodmenu.sections:所有餐区的集合,为数组结构 - 每个餐区对象包含两个关键属性:
title(餐区名称,对应结果字符串的前缀部分)、items(当前餐区下的菜品列表,为数组结构) - 每个菜品对象包含三个展示/判断必需的属性:
title(菜品名称)、available(是否可售)、price(菜品价格)
可直接运行的函数实现
function findPriceAbove(priceThreshold, targetMenu) { const abovePriceArray = []; // 第一层遍历:遍历所有餐区 for (const section of targetMenu.sections) { const sectionName = section.title; // 第二层遍历:遍历当前餐区下的所有菜品 for (const dish of section.items) { // 匹配条件:菜品可售 且 价格高于设定阈值 if (dish.available && dish.price > priceThreshold) { // 拼接为要求格式的字符串 const resultStr = `${sectionName}-${dish.title}(${dish.price})`; abovePriceArray.push(resultStr); } } } return abovePriceArray; }
效果验证
将题目中提供的foodmenu对象传入函数,设置价格阈值为5,函数返回结果为:
[ 'App-Snicker(12)', 'App-Donuts(11)', 'FullMeal-Chinese Chicken(14)' ]
和Python语法的对应参考
帮你快速适配JS的语法差异,减少认知负担:
- JS遍历数组推荐使用*
for...of*语法,和Python的for 元素 in 列表逻辑完全一致,不需要像之前草稿那样用Object.entries做无意义的对象键值对转换 - 多条件逻辑判断用*
&&*代替Python的and - 带变量的字符串拼接可以用反引号包裹的模板字符串实现,和Python的f-string语法逻辑一致
- 访问对象属性直接用
.操作符即可,比如section.title就等价于Python里的section['title'] - JS中判断对象自有属性的
hasOwnProperty方法在这里不需要使用,因为我们是顺着确定的属性路径访问,不是遍历未知的对象键值
内容的提问来源于stack exchange,提问作者JT Saiyan
相关产品推荐
相关产品推荐

