我已经看到了很多不同的方法来访问对象数组中的值。一个是arr.forEach(Function)
,其中函数只是for...in
但我很好奇,为什么两个for...in
函数不起作用,例如:
[{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }]
(取自freeCodeCamp)。
这有效:
function myFunction (item, index) {
for( var key in item ) {
console.log(item[key])
}
}
arr.forEach(myFunction
(打印所有值都很好)
但是为什么这不起作用:
for(key in arr)
{
for(value in key)
{
console.log(key[value];
}
}
我认为这样可行,因为我们可以执行arr [key](并在外循环中打印出对象,但我无法以这种方式访问这些值)
编辑:
旁注:我是否可以打印出每个子键/值对:IE例如在数组索引0上打印出来"first: "Romeo"
然后打印"last: "Montague"
答案 0 :(得分:3)
但是为什么这不起作用:
因为在这种情况下key
将是string
,而不是数组的元素。
您不应使用for..in
来迭代数组:MDN。
较新版本的JavaScript(ECMAScript)提供了使用for..of
循环的功能,这些循环非常适合迭代数组:
for (var item of arr) {
console.log(item);
}
答案 1 :(得分:1)
它不起作用,因为第二个key
中的for ... in
是动态的,在第一个示例中你不能item.key
的原因相同
答案 2 :(得分:0)
您需要循环遍历数组的索引,然后遍历数组项的键。
var array = [{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }],
key, index;
for (index = 0; index < array.length; index++) {
for(key in array[index]) {
console.log(array[index][key]);
}
}