[英]Loop through array of object where it's elements contains array of elements that can be repeated, then return match
[英]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.