簡體   English   中英

循環遍歷對象數組並比較結果的簡單方法?

[英]Simple way to loop through array of objects and compare results?

我有一個包含 15 個對象的數組,每個對象包含一個鍵值對。 我怎樣才能遍歷這個數組來檢查每個對象中的鍵值對是否具有某個值,例如“是”? 請記住,我已經遍歷了 25 個對象,並且這些對象中的每一個都包含這個數組。

這是我的代碼:

    let results = Object.keys(halls);
    let filtered = [];
    results.filter(key => {
        if (postcode == halls[key]['Location'][3]['Postcode'] && suburb == "") {return true;};

        arrayC.map((x) => {
            for (let i = 0; i < 15; i++) {
                if (halls[key]['Facility'][i][`${x}`] == "Yes") {return true;}
            };
        }); 
        return false;
    }).forEach(key => filtered.push([halls[key]]));

我認為問題可能在於我如何在 for 循環中返回 true,但我不確定。

任何幫助表示贊賞! (不,我不能改變數據結構)

更新

工作代碼:

        for (let a = 0; a < 15; a++) {
            let x = arrayC[a];
            for (let i = 0; i < 15; i++) {
                if (halls[key]['Facility'][i][`${x}`] == "Yes") {return true;}
            };
        }; 

首先將15項邏輯提取到單獨的函數中。 我們不使用map ,而是使用every ,因為您有興趣查找; 是否每個項目的值都是“是”。 (如果您只想找到某些具有值的項目“是”,請使用some切換every項目)

EveryItemsValueIsYes(array, key){
    const elements = array.every(item => {
        for(let i=0; i<15; i++){
            if(halls[key]['Facility'][i][`${x}`] == "Yes"){
                return true;
            }
        }   
    });
    return elements.length > 0;
}

用函數替換內部數組映射代碼。

此外,我們可以將其替換為map並直接將值分配給過濾器,而不是在最后使用forEach

const filtered = results.filter((key) => {
if (postcode == halls[key]['Location'][3]['Postcode'] && suburb == "") {return true;}
    return EveryItemsValueIsYes(arrayC, key);
}).map(key => halls[key]);

暫無
暫無

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

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