问题描述
我想知道为什么当您在对象中看到星期三= 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))
1楼
您正在改写的值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;
}
2楼
当您的代码达到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));
3楼
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));