【发布时间】:2021-04-28 07:23:24
【问题描述】:
我有一个带有嵌套对象的对象,例如:
let menu = {
vegetarian: {
vegStarter: {
plainPizza: 100,
cheesePizza: 200,
onionPizza: 200
},
},
nonVegetarian: {
nonVegStarter: {
meatLoversPizza: 160,
chickenPizza: 200,
chilliMeatPizza: 200
},
nonVegMainCourse: {
seafoodPizza: 300,
spinachEggPizza: 200,
eggPizza: 250
}
}
};
我需要收集所有具有相同值的键,并且必须使用递归。我的值是 200。我用 find() 和 filter() 方法尝试了代码,但没有得到想要的结果。下面是带有输出的代码:
function searchUsingPriceFromMainMenu(mainObject) {
let arrOfKeys = [];
Object.values(mainObject).forEach(val => {
if (val === 200 && typeof val !== "object") {
arrOfKeys = Object.keys(mainObject).filter(key => mainObject[key] === val);
document.write(arrOfKeys + "<br>")
} else {
if (typeof val === "object") {
searchUsingPriceFromMainMenu(val, arrOfKeys)
}
}
});
}
searchUsingPriceFromMainMenu(menu);
使用 filter() 方法:
cheesePizza,onionPizza
cheesePizza,onionPizza
chickenPizza,chilliMeatPizza
chickenPizza,chilliMeatPizza
spinachEggPizza
使用 find() 方法:只是用 find 代替了过滤器。代码同上。
cheesePizza
cheesePizza
chickenPizza
chickenPizza
spinachEggPizza
但我想要类似的结果:
cheesePizza
onionPizza
chickenPizza
chilliMeatPizza
spinachEggPizza
那么,是我遗漏了什么还是有其他方法可以得到相同的东西?请帮忙。
【问题讨论】:
标签: javascript arrays recursion javascript-objects nested-object