2015-06-26 98 views
0

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

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

不使用“数组”作为变量名称。尝试像'usersArray',或只是“用户”。只是一个提示;) –

+0

@andre如果它是一个保留字,他会得到一个语法错误,代码不会运行。 – Barmar

+0

对我来说看起来很好,你确定对象的属性不存在吗? – dandavis

回答

0

似乎是工作,但你知道你通过引用复制不值吗?

当你这样做:

array[i].newObject = myObject; 

你最好不要让myObject的副本,并在阵列其分配给对象的属性NEWOBJECT [I],你正在为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++; 
    } 
};