Javascript通过对象数组循环?

Javascript通过对象数组循环?,javascript,Javascript,我正在尝试循环以下内容: { "messages": [{ "msgFrom": "13223821242", "msgBody": "Hi there" }, { "msgFrom": "Bill", "msgBody": "Hello!" }] } var cars = [{name: 'Audi'}, {name: 'BMW'}, {name: 'Ferrari'}, {name: 'Mercedes

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

{
    "messages": [{
        "msgFrom": "13223821242",
        "msgBody": "Hi there"
    }, {
        "msgFrom": "Bill",
        "msgBody": "Hello!"
    }]
}
var cars = [{name: 'Audi'}, {name: 'BMW'}, {name: 'Ferrari'}, {name: 'Mercedes'}, {name: 'Maserati'}];

for(var i = 0; i < cars.length; i++) {
    console.log(cars[i].name);
}
// Audi
// BMW
// Ferrari
// Mercedes
// Maserati
我想从
msgFrom
msgBody

我试过:

        for (var key in data) {
           var obj = data[key];
           for (var prop in obj) {
              if(obj.hasOwnProperty(prop)){
                console.log(prop + " = " + obj[prop]);
              }
           }
        }
但是控制台日志会打印
[Object]


你知道我做错了什么吗?

在你的脚本中,数据是你的整个对象

关键是“messages”,这是一个数组,您需要像这样迭代:

    for (var key in data) {
       var arr = data[key];
       for( var i = 0; i < arr.length; i++ ) {
           var obj = arr[ i ];
           for (var prop in obj) {
               if(obj.hasOwnProperty(prop)){
                   console.log(prop + " = " + obj[prop]);
               }
           }
       }
    }
var person={
    first_name:"johnny",
    last_name: "johnson",
    phone:"703-3424-1111"
};
for(变量输入数据){
var arr=数据[键];
对于(变量i=0;i
看起来您可能只是错过了
数据中的
“messages”
属性,因此循环很可能是迭代根
对象而不是
数组

for (var key in data.messages) {
    var obj = data.messages[key];
    // ...
}
for (var i = 0, l = data.messages.length; i < l; i++) {
    var obj = data.messages[i];
    // ...
}
除非在给定代码段之前将
data
设置为
messages

>,您应该考虑对于Load < <代码>数组> <代码>:

for (var key in data.messages) {
    var obj = data.messages[key];
    // ...
}
for (var i = 0, l = data.messages.length; i < l; i++) {
    var obj = data.messages[i];
    // ...
}
for(变量i=0,l=data.messages.length;i
您可以使用forEach方法对对象数组进行迭代

data.messages.forEach(function(message){
    console.log(message)
});
参考:

引用包含一个或多个对象的单个数组的内容,即括号中的所有内容 {messages:[{“a”:1,“b”:2}]},只需向查询中添加[0]即可获得第一个数组元素

e、 g.消息[0]将引用对象{“a”:1,“b”:2} 与只引用整个数组[{“a”:1,“b”:2}]的消息相反


从那里,您可以使用结果作为典型对象,并使用object.keys(例如)获取“a”和“b”

建议的for循环很好,但您必须使用
hasOwnProperty
检查属性。我建议使用只返回对象()的“自己的属性”的
Object.keys()

var数据={
“信息”:[{
“msgFrom”:“13223821242”,
“msgBody”:“你好”
}, {
“msgFrom”:“法案”,
“msgBody”:“你好!”
}]
};
data.messages.forEach(函数(消息、索引){
console.log('消息索引'+索引);
Object.keys(message).forEach(函数(prop){
console.log(prop+“=”+消息[prop]);
});

});要在javascript中循环对象数组或仅循环数组,可以执行以下操作:

{
    "messages": [{
        "msgFrom": "13223821242",
        "msgBody": "Hi there"
    }, {
        "msgFrom": "Bill",
        "msgBody": "Hello!"
    }]
}
var cars = [{name: 'Audi'}, {name: 'BMW'}, {name: 'Ferrari'}, {name: 'Mercedes'}, {name: 'Maserati'}];

for(var i = 0; i < cars.length; i++) {
    console.log(cars[i].name);
}
// Audi
// BMW
// Ferrari
// Mercedes
// Maserati
它们都输出以下内容:

{
    "messages": [{
        "msgFrom": "13223821242",
        "msgBody": "Hi there"
    }, {
        "msgFrom": "Bill",
        "msgBody": "Hello!"
    }]
}
var cars = [{name: 'Audi'}, {name: 'BMW'}, {name: 'Ferrari'}, {name: 'Mercedes'}, {name: 'Maserati'}];

for(var i = 0; i < cars.length; i++) {
    console.log(cars[i].name);
}
// Audi
// BMW
// Ferrari
// Mercedes
// Maserati

迭代次数

方法1:
forEach
方法

messages.forEach(function(message) {
   console.log(message);
}
for(let message of messages){
   console.log(message);
}
for(let key in messages){
       console.log(messages[key]);
 }

方法2:
方法的

messages.forEach(function(message) {
   console.log(message);
}
for(let message of messages){
   console.log(message);
}
for(let key in messages){
       console.log(messages[key]);
 }
注意:此方法可能不适用于对象,例如:

let obj = { a: 'foo', b: { c: 'bar', d: 'daz' }, e: 'qux' }

方法2:
方法中的

messages.forEach(function(message) {
   console.log(message);
}
for(let message of messages){
   console.log(message);
}
for(let key in messages){
       console.log(messages[key]);
 }

这里提供的所有答案都使用普通函数,但现在我们的大多数代码在ES6中使用箭头函数。我希望我的回答能帮助读者在对对象数组进行迭代时如何使用箭头函数

let data = {
      "messages": [{
           "msgFrom": "13223821242",
           "msgBody": "Hi there"
       }, {
          "msgFrom": "Bill",
          "msgBody": "Hello!"
       }]
 }
使用arrow函数对数组执行forEach

 data.messages.forEach((obj, i) => {
     console.log("msgFrom", obj.msgFrom);
     console.log("msgBody", obj.msgBody);
 });
 data.messages.map((obj, i) => {
     console.log("msgFrom", obj.msgFrom);
     console.log("msgBody", obj.msgBody);
 });
使用箭头函数在数组上映射

 data.messages.forEach((obj, i) => {
     console.log("msgFrom", obj.msgFrom);
     console.log("msgBody", obj.msgBody);
 });
 data.messages.map((obj, i) => {
     console.log("msgFrom", obj.msgFrom);
     console.log("msgBody", obj.msgBody);
 });
for(让我们输入数据){
设值=数据[键];
对于(i=0;i
以下是循环对象(人)中字段对象的通用方法:

obj中的人如下所示:

    for (var key in data) {
       var arr = data[key];
       for( var i = 0; i < arr.length; i++ ) {
           var obj = arr[ i ];
           for (var prop in obj) {
               if(obj.hasOwnProperty(prop)){
                   console.log(prop + " = " + obj[prop]);
               }
           }
       }
    }
var person={
    first_name:"johnny",
    last_name: "johnson",
    phone:"703-3424-1111"
};
arr=[{食品:“曼达齐”,价格:5},{食品:“红茶”,价格:20},{食品:“黑咖啡”,价格:20} ]; txt=“”; 对于(i=0;i); } document.getElementById(“show”).innerHTML=txt;
console.log(obj,prop);
在数组中不使用for..in的唯一可靠原因是属性可能不会按预期顺序返回。否则,它与在任何其他对象(意外属性、来自
[[Prototype]]
的属性等)上使用for..in没有什么区别谢谢你帮我把它改成一个正则循环!尽可能快地接受。为什么他要考虑使用< <代码> > <代码>循环> @ TraveSeHealEngult>代码> ..在/<代码中>将数组作为一个简单的对象,以不保证的顺序迭代所有可枚举键,而不只是它的索引,<代码> 0 > <代码> LE。nGHT-1
。有时,这可能确实是需要的。通常不是。-JonathanLonowski谢谢,也许你可以把它添加到你的答案中?这个答案非常简单和简单efficient@sandeeprajbhandari您能更进一步,告诉我如何一次只返回一条消息,而不是一次返回所有消息吗?这需要ECMA脚本2015,不会在较旧的浏览器和移动设备中工作。谢谢Tarvo,您的建议非常适合我的需要。虽然您的代码可能会提供问题的答案,但请添加上下文/解释,以便其他人了解它的作用和原因。感谢您提供此代码片段,它可能会提供一些有限的即时帮助ld通过说明为什么这是一个很好的问题解决方案,极大地提高了其长期价值,并使其对未来读者提出其他类似问题更有用。请编辑您的答案,添加一些解释,包括您所做的假设。需要ECMA Script 2015,在旧浏览器中不起作用。