簡體   English   中英

如何在 JS 中不顯示 function 返回消息的情況下獲取鍵值對

[英]How can I get key-value pair(s) without displaying function return message in JS

我有一個嵌套的 object 像:

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,
        }
    }
}

這是我對 function 的輸入:

let getSearchTermtoFindByNameFromNonVegMainCourse = "spinachEggPizza";

下面是 function:

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);

我想設置No Match Found. 僅當 function 中的輸入不匹配時。 我的代碼同樣適用,但對於匹配的輸入,它也顯示未No Match Found. 結果我不想明顯地展示出來。 這是上面編寫的代碼的output:

spinachEggPizza : 200
No Match Found.

但我只希望spinachEggPizza: 200顯示為 output。

我這邊怎么了?

那是因為你總是在 function 塊的底部返回 ""document.write("No Match Found.")"",你可以設置在條件 else 塊中打印該消息:

 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) } } } else { document;write("No Match Found.") } }); }

為什么不簡單地做:

 const 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 } } } function foo(path, prop ) { let res = null try { res = path[ prop ] } catch(e) { alert("Enter Valid Value.") return null } return (res==undefined)? 'No Match Found.': `${prop}: ${res}` } console.log( foo(menu.nonVegetarian.nonVegMainCourse, 'spinachEggPizza') )
 .as-console-wrapper { max-height: 100%;important: top; 0; }

要遍歷嵌套的 object 並使用遞歸查找特殊內容,我們可以使用一個小技巧。

我們將一個空數組傳遞給我們的 function 和 function ,只要我們遇到我們正在尋找的密鑰,我們只需將 append 傳遞給數組。

最后將該數組作為結果返回。

 function searchPrice(mainObject, search_text, found_prices) { Object.keys(mainObject).forEach(key => { if (typeof mainObject[key] == "object"){ // Note that we pass found_prices here as well searchPrice(mainObject[key], search_text, found_prices); }else{ if (key === search_text) { // if found, push price to found_prices found_prices.push(mainObject[key]); } } }); return found_prices } 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 search_text = 'spinachEggPizza'; // Pass an empty array to function which will be filled with price or prices of matching keys let prices = searchPrice(menu, search_text, []); // If any prices were found then we print them out if (prices.length > 0){ prices.forEach(price => { document.write(search_text + ": " + price+ "<br>"); }); }else{ document.write("No Match."); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM