我该如何循环遍历JavaScript对象数组?

77

我正在尝试循环遍历以下内容:

{
    "messages": [{
        "msgFrom": "13223821242",
        "msgBody": "Hi there"
    }, {
        "msgFrom": "Bill",
        "msgBody": "Hello!"
    }]
}

我想获取 msgFrommsgBody

我已尝试:

        for (var key in data) {
           var obj = data[key];
           for (var prop in obj) {
              if(obj.hasOwnProperty(prop)){
                console.log(prop + " = " + obj[prop]);
              }
           }
        }

但控制台日志输出 [Object]

有任何想法我做错了什么吗?


2
console.log(obj, prop); - zerkms
3
通常情况下,你应该避免使用for..in来迭代数组。 - Jonathan Lonowski
不使用for..in与数组的唯一可信原因是属性可能无法按预期顺序返回。否则,它与在任何其他对象上使用for..in一样好或一样差(意外属性,来自[[Prototype]]的属性等)。 - RobG
13个回答

0

let data = {
    "messages": [{
        "msgFrom": "13223821242",
        "msgBody": "Hi there"
    }, {
        "msgFrom": "Bill",
        "msgBody": "Hello!"
    }]
}

for ( i = 0; i < data.messages.length; i++ ) {
  console.log( `Message from ${data.messages[i].msgFrom}: ${data.messages[i].msgBody}` )
}


0
for (let key in data) {
    let value = data[key];
    for (i = 0; i < value.length; i++) {
      console.log(value[i].msgFrom);
      console.log(value[i].msgBody);
    }
  }

2
虽然你的代码可能提供了问题的答案,但请添加上下文/解释,以便其他人了解它的作用和原因。 - Lin Du

-2
arr = [{food:"Mandazi", Price: 5},{food:"Black Tea", Price: 20},{food:"Black Coffee", Price: 20}
];
txt = "";
for (i = 0; i < arr.length; i++) {
    txt += arr[i].food + ": $" + arr[i].Price + "
"; } document.getElementById("show").innerHTML = txt;

感谢您提供这段代码片段,它可能会提供一些有限的、即时的帮助。一个适当的解释将极大地提高其长期价值,因为它展示了为什么这是一个好的问题解决方案,并使其对未来读者具有其他类似问题更有用。请编辑您的答案添加一些解释,包括您所做的假设。 - Syscall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接