簡體   English   中英

試圖遍歷元素為對象的數組

[英]trying to loop through an array where the elements are object

我想知道為什么當您在對象中看到星期三= 34時代碼會輸出false。我認為我可能在更改i變量時遇到問題。

var lookup = [{"Monday" : 12}, {"Wednesday" : 34},{"Thursday" : 0},{"Saturday" : 56} ]
// console.log(lookup[1]["Wednesday"] == 34) // prints out true
function ami(day, num){
    var a;
    for(var i = 0; i < lookup.length; i++){
        if(lookup[i][day] == num || 
            day == "Tuesday" && num >95 ||
             day == "Friday" && num %2 == 0 || 
             day == "Sunday" && num == 666 ||
             day == "Sunday" && num == -666){
            a = true
        }else{
            a = false
        }

     }
     return a;

}
console.log(ami("Wednesday", 34))

您正在改寫的值a與每個迭代for循環。 本質上,您所做的是檢查lookup數組的最后一項,因為以前的結果總是會被覆蓋。

我不完全知道您要在何種條件下嘗試實現什么,但這可能是您需要的:

function ami(day, num){
    for(var i = 0; i < lookup.length; i++){
        if(lookup[i][day] == num || 
            day == "Tuesday" && num >95 ||
            day == "Friday" && num %2 == 0 || 
            day == "Sunday" && num == 666 ||
            day == "Sunday" && num == -666){
           return true;
        }
    }
    return false;
}

當您的代碼達到i = 1時,a確實設置為true。 但是之后允許循環繼續,所以當我增加到2時,a再次設置為false。

您可以通過確定返回值應為true來從函數中返回來解決此問題:

var lookup = [{"Monday" : 12}, {"Wednesday" : 34},{"Thursday" : 0},{"Saturday" : 56} ]
function ami(day, num){
    for(var i = 0; i < lookup.length; i++){
        if(lookup[i][day] == num || 
            day == "Tuesday" && num >95 ||
             day == "Friday" && num %2 == 0 || 
             day == "Sunday" && num == 666 ||
             day == "Sunday" && num == -666){
            return true;
        }
     }
}
console.log(ami("Wednesday", 34));

如果使用普通對象作為查找表,則可以進一步簡化代碼:

var lookup = {"Monday" : 12, "Wednesday" : 34, "Thursday" : 0, "Saturday" : 56};
function ami(day, num){
    return (lookup[day] == num || 
        day == "Tuesday" && num >95 ||
         day == "Friday" && num %2 == 0 || 
         day == "Sunday" && num == 666 ||
         day == "Sunday" && num == -666);
}
console.log(ami("Wednesday", 34));

Array.some()應該做到這一點。

 var lookup = [{ "Monday": 12 }, { "Wednesday": 34 }, { "Thursday": 0 }, { "Saturday": 56 }]; function ami(day, num) { return lookup.some(function (a) { return a[day] === num; }) || day == "Tuesday" && num > 95 || day == "Friday" && num % 2 == 0 || day == "Sunday" && num == 666 || day == "Sunday" && num == -666 } document.write(ami("Wednesday", 34)); 

另一種可能性是將查找數組優化為具有多個屬性的對象,例如

var lookup = { "Monday": 12, "Wednesday": 34, "Thursday": 0, "Saturday": 56 };

另一個版本是這個。 我獲取了您的代碼,並更改了條件和循環條件的行為。 因此,首先評估給定條件,然后在必要時對數組進行迭代。 取變量a以及停止迭代的指示符以及返回值。

 var lookup = [{ "Monday": 12 }, { "Wednesday": 34 }, { "Thursday": 0 }, { "Saturday": 56 }]; function ami(day, num) { var a = false; if (day == "Tuesday" && num > 95 || day == "Friday" && num % 2 == 0 || day == "Sunday" && num == 666 || day == "Sunday" && num == -666) { a = true; } for (var i = 0; !a && i < lookup.length; i++) { a = lookup[i][day] == num; } return a; } document.write(ami("Wednesday", 34)); 

暫無
暫無

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

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