为什么for.in()循环不返回数组内部的对象
Why for..in() loop doesn't return objects inside of an array?
我在一个angular控制器中有这样一段代码:
for (var obj in $scope.items) {
obj.done = false;
}
这是我的$scope.items
的样子:
$scope.items = [
{
name: "Task #1",
done: false
},
{
name: "Task #2",
done: false
}
];
对我来说很奇怪,我的for循环实际上不起作用。obj
不是循环中的对象。我试图做obj
变量的console.log
,它打印出数组$scope.items
的索引。为什么会这样呢?既然这是一个foreach
循环,那么obj
不应该是$scope.items
中的每个对象吗?
for..in
枚举对象的属性names:
var foo = { a: 5, b: 7 };
for (var x in foo) {
console.log(x);
}
// -> a
// -> b
如果你想要属性值,你只需要在对象中使用名称查找属性:
var foo = { a: 5, b: 7 };
for (var x in foo) {
var value = foo[x];
console.log(value);
}
// -> 5
// -> 7
然而,对于数组,使用它的属性来迭代它的元素并不是一个好主意。如果向数组中添加常规属性,例如:
var arr = [ 1, 2, 3 ];
arr.myProp = "someValue";
则myProp
也将出现在for..in
循环中,这通常是不需要的。相反,强烈建议使用常规 for
循环或使用Array.forEach
:
arr.forEach(function(value, index) {
console.log(value);
})
// -> 1
// -> 2
// -> 3
for .. in
迭代键(或索引),而不是值。你应该这样做:
for (var index in $scope.items) {
$scope.items[index].done = false;
}
一般来说,使用for .. in
迭代数组被认为是一种不好的做法。您可以使用forEach
方法代替:
$scope.items.forEach(function (item) {
item.done = false;
});
for..in
所做的是迭代对象的属性或属性,而不是数组的元素。如果你想迭代一个数组,那么你应该使用普通的for
循环for(var i =0; i<n; i++)..
相关文章:
- 对象数组返回自最近日期以来的最高总体值
- 从多维数组返回嵌套数组
- 为什么当我点击<a>使用纯javascript;这个“;返回url,数组返回“url”;未定义”;
- 带多维数组返回字符串的json_encode;阵列”;而不是数据
- 如何将 AJAX 响应作为 JavaScript 数组返回
- 我正在尝试在 JS 中制作这个随机名称生成器.数组返回未定义
- .push() 多个对象进入 JavaScript 数组返回 'undefined'
- 如何按属性从可观察数组返回项
- 通过jquery发送的关联php数组返回[对象对象]
- 从 Javascript 中的对象数组返回单个属性的数组
- 循环遍历对象数组返回“未定义”
- 拼接数组返回空的序列
- Javascript 多维数组返回第一个值,然后失败
- Json 数组返回空值
- 从下划线.js中的数组返回一系列值
- for 语句不从数组返回值
- MongoDB从数组返回特定字段
- 试图将数组返回到表中的列表中
- Javascript中的二维数组返回未定义的数组
- 将函数数组作为布尔值数组返回