试图循环遍历元素为object的数组
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))
在for
循环的每次迭代中重写a
的值。从本质上讲,您正在做的是检查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。但在此之后,循环被允许继续,所以当i被增加到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));
相关文章:
- 循环的数组推入在Object容器中具有不同的值
- Join架构验证:Join.object定义数组中的有效键
- JavaScript-从对象数组中输出随机OBJECT
- JavaScript:Association/Object数组中的indexOf
- 比较“;这个“;DOM数组中具有object的对象
- jQuery DataTables:纯数组或Object
- Ember.js with EmberFire Object - 如何使用数组属性
- 给定一个对象数组,创建一个函数,该函数返回一个 Object,该 Object 具有按类型分组的路径数组
- jQuery 数据表 aaData 不接受字符串数组,仅适用于 Object
- Django:返回[Object object]而不是django视图数组
- 将本机数组/对象转换为 Ember.Array/Ember.Object 的最佳实践
- 为什么 Object.keys(Array.prototype) 返回空数组
- Object.observe 并不总是为我在数组上提供正确的删除索引
- 为什么 DOM 的 Object.getOwnPropertyNames 返回空数组
- 在 Javascript 中使用内部数组构建 JSON-Object
- 在 Object.prototype 上为 NodeList 对象实现数组方法是否是一个很好的实践?
- Javascript将Object推送到全局数组会覆盖以前的值
- 从另一个对象创建一个Object数组
- 更改object数组中的数据类型
- 排序[Object Object]数组在Javascript中