通过循环将对象添加到一组数组中的对象中

时间:2015-06-26 20:06:14

标签: javascript arrays object

我试图通过循环将一组对象添加到一组数组中的对象中。以下是我的例子,我不确定我的解释是否有意义。

var myObject = {x: ["random", "random person"], y: ["tree"]};

var array = [ {
  username: 'example',
  tagline: 'value',
  noises: ['noise', 'sneeze'] 
}, {
  username: 'example1',
  tagline: 'value1',
  noises: ['quack', 'honk', 'sneeze', 'growl'] 
}, {
  username: 'example2',
  tagline: 'value2', 
  noises: ['what', 'up', 'doc']
}, {
  username: 'example3',
  tagline: 'value3',
  noises: ['ptshshhh', 'spit', 'asdfsadf']
}];

for(var i = 0; i < array.length; i++) {
    array[i].newObject = myObject;
}

当我将newObject添加到数组中的对象时,它将数组中的每个对象输出为

newObject: { x: [Object], y: [Object] } }

如果我从数组[i]中删除i,它只会添加

var myObject = {x: ["random", "random person"], y: ["tree"]};

仅在最后。我想要它,myObject作为newObject添加到数组中的每个对象。

1 个答案:

答案 0 :(得分:0)

似乎工作正常,但您是否知道您通过引用复制而不是值?

执行此操作时:

array[i].newObject = myObject;

您不是在复制myObject并将其分配给array [i]中对象的属性newObject,而是在对myObject进行引用。如果您将任何内容更改为newObject,它将影响对它的所有引用。

如果这是你想要的,如果没有,你会想要一个对象文字代替你的参考,如下:

for(var i = 0; i < array.length; i++) {
    array[i].newObject = {
        x: ["random", "random person"], 
        y: ["tree"]
    };
}

// changing first x element in newObject of array[0]
array[0].newObject.x[0] = 'not random';

// change only effected array[0]
console.log(array[0].newObject.x[0]); // not random
console.log(array[1].newObject.x[0]); // random

其他解决方案将涉及构造函数,或使用某种克隆函数。

在查看数组状态时,您需要编写另一个可能称为绘图,查看器或渲染的函数。您可以使用console.log()输出到控制台,或者如果这是客户端代码,则使用DOM执行某些操作。

// simple viewer that just logs username, and state of newObject to console.
var viewer = function(profiles){
    var i=0,len = profiles.length;
    while(i < len){
        console.log('**********')
        console.log('username: '+profiles[i].username);
        console.log('newObject: ' + JSON.stringify(profiles[i].newObject));
        i++;
    }
};