将对象推入数组的意外结果

时间:2014-03-13 12:44:34

标签: javascript arrays object iteration

如何在JavaScript中迭代一系列文字对象?

我想做那样的事情:

grupo = []; // declare array

text = {}; // declare new object
text.a = "texta"; // declare property "a" of an object.
text.b = "textb";
grupo.push(text); // add object to array

text = {}; // declare new object
text.a = "textc"; // declare property
grupo.push(text); // add object with other property

// Iterate over
for (i=0; i<=grupo.length; i++) {
    console.dir(grupo[i].text.a);
}

4 个答案:

答案 0 :(得分:1)

你的意思是这样吗?

for (var key in validation_messages) {
var obj = validation_messages[key];
   for (var prop in obj) {
      // important check that this is objects own property 
      // not from prototype prop inherited
      if(obj.hasOwnProperty(prop)){
        alert(prop + " = " + obj[prop]);
      }
   }
}

参考:https://stackoverflow.com/a/921808/1054926

答案 1 :(得分:1)

该代码中存在各种错误:

  1. 您将相同的对象放入数组中两次,而不是将两个对象放入数组中。将text推入数组后,您只需覆盖同一对象上的a属性并再次推送它。您还没有创建新对象。

  2. 你还没有声明你的任何变数(你所说的所有地方都是&#34;声明&#34;在你的评论中,那些不是声明),所以你堕落了猎物The Horror of Implicit Globals。使用var声明变量。

  3. 行注释应以//开头,而非\\(导致语法错误)

  4. 最后的for循环应使用<而非<=作为终止条件。有关在JavaScript中循环遍历数组的各种方法,see this question and its answers

  5. 这是该代码的清理版本:

    var text, grupo, i; // Declare variables
    
    text = {};          // Create an object and assign it to the variable
    grupo = [];         // Create an array and assign it to the variable
    
    text.a = "texta";   // Set the property `a` on the object
    text.b = "textb";   // Set the property `b` on the object
    grupo.push(text);   // Put that object onto the array
    text = {};          // Create a second object
    text.a = "textc";   // Set the property `a` on that new object
    grupo.push(text);   // Put that object on the array
    
    for (i=0;i<grupo.length;i++) {
    //         ^-------------------- Note no =
        console.dir(grupo[i].text.a);
    }
    

答案 2 :(得分:0)

groupo [i]已经是一个文本对象,所以你在那里有一个错误。此外,您不希望直到您的索引是&lt; =到该长度。

以下是您在循环中可能正在寻找的内容:

for (i=0;i<grupo.length;i++) {  
console.log(i,grupo[i].a);

}

但是当您发现“a”的值不是您可能期望的值时,您会遇到其他问题。

答案 3 :(得分:0)

这是另一种可能的“解决方案”

var text = {};  
var grupo = []; 

text.a = "texta";
text.b = "textb";
grupo.push(text);
text.a = "textc";
grupo.push(text);

for (var i=0;i < grupo.length;i++) {  
    var x = grupo[i];
    if (x && x.a){
        console.log(x.a);        
    } else {
        console.log(x);                
    }
}