Javascript 如何在JS中不显示函数返回消息的情况下获取键值对
我有一个嵌套对象,如:Javascript 如何在JS中不显示函数返回消息的情况下获取键值对,javascript,function,if-statement,Javascript,Function,If Statement,我有一个嵌套对象,如: let menu = { vegetarian: { vegStarter: { plainPizza: 100, redChilliPizza: 150, cheesePizza: 200, capsicumPizza: 160, onionPizza: 200, }, vegMainCourse
let menu = {
vegetarian: {
vegStarter: {
plainPizza: 100,
redChilliPizza: 150,
cheesePizza: 200,
capsicumPizza: 160,
onionPizza: 200,
},
vegMainCourse: {
pepperoniPizza: 150,
mushroomsPizza: 160,
extraCheesePizza: 250,
blackOlivesPizza: 220,
greenPeppersPizza: 180,
}
},
nonVegetarian: {
nonVegStarter: {
supremeMeatPizza: 100,
meatPizza: 130,
meatLoversPizza: 160,
chickenPizza: 200,
chilliMeatPizza: 200
},
nonVegMainCourse: {
butterMeatPizza: 220,
spicyChickenPizza: 170,
seafoodPizza: 300,
spinachEggPizza: 200,
eggPizza: 250,
}
}
}
这是我对函数的输入:
let getSearchTermtoFindByNameFromNonVegMainCourse = "spinachEggPizza";
function searchUsingNameFromNonVegMainCourseCategory(mainObject, getSearchTermtoFindByNameFromNonVegMainCourse) {
let arrOfNonVegMainCourseKeys = [];
Object.keys(mainObject).forEach(key => {
if (getSearchTermtoFindByNameFromNonVegMainCourse === ' ') {
alert("Enter Valid Value.")
} else {
if (key !== getSearchTermtoFindByNameFromNonVegMainCourse) {
} else {
if (key === getSearchTermtoFindByNameFromNonVegMainCourse && typeof mainObject[key] !== "object") {
arrOfNonVegMainCourseKeys = key;
document.write(arrOfNonVegMainCourseKeys + " : " + mainObject[key] + "<br>");
} else {
if (typeof mainObject[key] === "object") {
searchUsingNameFromNonVegMainCourseCategory(mainObject[key], getSearchTermtoFindByNameFromNonVegMainCourse, arrOfNonVegMainCourseKeys)
}
}
}
}
}); return document.write("No Match Found.");
}
searchUsingNameFromNonVegMainCourseCategory(menu.nonVegetarian.nonVegMainCourse, getSearchTermtoFindByNameFromNonVegMainCourse);
功能如下:
let getSearchTermtoFindByNameFromNonVegMainCourse = "spinachEggPizza";
function searchUsingNameFromNonVegMainCourseCategory(mainObject, getSearchTermtoFindByNameFromNonVegMainCourse) {
let arrOfNonVegMainCourseKeys = [];
Object.keys(mainObject).forEach(key => {
if (getSearchTermtoFindByNameFromNonVegMainCourse === ' ') {
alert("Enter Valid Value.")
} else {
if (key !== getSearchTermtoFindByNameFromNonVegMainCourse) {
} else {
if (key === getSearchTermtoFindByNameFromNonVegMainCourse && typeof mainObject[key] !== "object") {
arrOfNonVegMainCourseKeys = key;
document.write(arrOfNonVegMainCourseKeys + " : " + mainObject[key] + "<br>");
} else {
if (typeof mainObject[key] === "object") {
searchUsingNameFromNonVegMainCourseCategory(mainObject[key], getSearchTermtoFindByNameFromNonVegMainCourse, arrOfNonVegMainCourseKeys)
}
}
}
}
}); return document.write("No Match Found.");
}
searchUsingNameFromNonVegMainCourseCategory(menu.nonVegetarian.nonVegMainCourse, getSearchTermtoFindByNameFromNonVegMainCourse);
但我只希望spinachEggPizza:200
显示为输出
我这边出了什么问题?这是因为您总是在功能块底部返回“document.write(“未找到匹配项”)”,您可以设置在条件else块中打印该消息:
if(GetSearchTermToFindByNamefromNonSegmainCourse==''){
警报(“输入有效值”)
}否则{
if(key!==GetSearchTermToFindByNamefromNonSegmainCourse){
}否则{
if(key==GetSearchTermToFindByNamefromNonSegmainCourse&&TypeOfMainObject[key]!==“object”){
arrOfNonVegMainCourseKeys=键;
document.write(arrOfNonVegMainCourseKeys+”:“+mainObject[key]+”
”;
}否则{
if(主对象的类型[键]=“对象”){
使用NonVegMainCourseCegory中的名称进行搜索(Main对象[key],从NonVegMainCourse、arrOfNonVegMainCourseKeys中获取SearchTerms到IndByName)
}
}
}否则{
document.write(“未找到匹配项”)
}
});
}
为什么不干脆做:
const菜单=
{素食者:
{蔬菜起动器:{普通披萨:100,红辣椒披萨:150,奶酪披萨:200,辣椒披萨:160,洋葱披萨:200}
,蔬菜主菜:{Pepperoni比萨:150,Mushromospizza:160,extraCheesePizza:250,黑橄榄比萨:220,青椒比萨:180}
}
,非素食主义者:
{Non-egstarter:{supremeMeatPizza:100,meatPizza:130,meatLoversPizza:160,chickenPizza:200,chilliMeatPizza:200}
,非芝士主菜:{乳酪比萨:220,辣味鸡比萨:170,海鲜比萨:300,菠菜比萨:200,鸡蛋比萨:250}
} }
函数foo(路径、道具){
设res=null
试一试{
res=路径[prop]
}
捕获(e){
警报(“输入有效值”)
返回空
}
return(res==未定义)?“未找到匹配项”。:`${prop}:${res}`
}
console.log(foo(menu.nonVegetarian.nonVegMainCourse,'spinachEggPizza'))
.as console wrapper{max height:100%!important;top:0;}
要遍历嵌套对象并使用递归查找特殊内容,我们可以使用一个小技巧
我们将一个空数组传递给我们的函数,在函数内部,每当我们遇到要查找的键时,我们就将它附加到数组中
最后返回该数组作为结果
函数searchPrice(主对象、搜索文本、找到的价格){
key(mainObject).forEach(key=>{
if(主对象的类型[键]=“对象”){
//请注意,我们在这里也传递找到的价格
searchPrice(主对象[键]、搜索文本、找到的价格);
}否则{
如果(键===搜索文本){
//如果找到,将价格推至找到的价格
找到价格推送(mainObject[key]);
}
}
});
退货价格
}
让菜单={
素食者:{
蔬菜起动器:{
普通披萨:100,
雷奇里皮扎:150,
cheesePizza:200,
辣椒比萨饼:160,
Ononipizza:200,
},
主要课程:{
Pepperoni比萨饼:150,
蘑菇比萨:160,
课外活动:250,
blackOlivesPizza:220,
青椒馅饼:180,
}
},
非素食主义者:{
非分段起动器:{
超级比萨饼:100,
肉比萨饼:130,
肉馅披萨:160,
鸡肉披萨:200,
辣椒披萨:200
},
非主流课程:{
奶油披萨:220,
辣鸡披萨:170,
海鲜比扎:300,
菠菜比萨饼:200,
鸡蛋披萨:250,
}
}
}
让search_text='spinachEggPizza';
//将一个空数组传递给函数,该函数将填充匹配键的price或price
让价格=搜索价格(菜单,搜索文本,[]);
//如果找到任何价格,我们会打印出来
如果(prices.length>0){
价格。forEach(价格=>{
文档。写入(搜索文本+“:“+price+”
”);
});
}否则{
文件。填写(“不匹配”);
}
同样,这在AbbasEbadian运行良好。但通过使用您的逻辑,我试图从根目录(即菜单)检查,我得到的是“不匹配”的有效输入。实际上,我想从菜单开始为我的所有案例设置此消息。如果你想让我分享代码,我可以。我再次更新了我的答案@kuldeep@AbbasEbadian。我希望你不会介意。@kuldeep如果我的答案确实回答了你的问题,并且对你有帮助,我将感谢你投票并将其标记为接受答案。