我试图通过循环将一组对象添加到一组数组中的对象中。以下是我的例子,我不确定我的解释是否有意义。
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添加到数组中的每个对象。
答案 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++;
}
};