如何动态地从包含对象的变量构建对象数组

时间:2015-01-27 22:40:26

标签: javascript arrays object

我正在尝试基于一个变量来构建一个javascript对象数组,该变量也有这样的对象:

时间#1:

console.log(obj_initial);
//{ evt1 : 'value1', evt2 : 'value2', evt3 : 'value3' }

此变量会在时间内更改其属性。

时间#2:

console.log(obj_initial);
//{ evtA : 'value9', evtB : 'value8', evtC : 'value7', evtD : 'value6' }

如何构建对象数组?像这样:

obj_final = [
    {
        evt1 : 'value1',
        evt2 : 'value2',
        evt3 : 'value3' },
    {
        evtA : 'value9',
        evtB : 'value8',
        evtC : 'value7',
        evtD : 'value6'},
    {
        ...
    }]

任何人请...提前感谢。

3 个答案:

答案 0 :(得分:2)

您可以在object_final中推送每个新对象。像这样:

object_final.push(obj_initial);

每次指向obj_initial的值发生变化时,都应调用此语句。

答案 1 :(得分:1)

<强> jsFiddle Demo

由于您要重新分配obj_initial的值,因此无需克隆。

var obj_final = [];

var obj_initial = {
    evt1 : 'value1',
    evt2 : 'value2',
    evt3 : 'value3'
};

obj_final.push(obj_initial);

//this assignment uses a new object reference
//and obj_initial is no longer a reference to the object pushed
//into obj_final
obj_initial = {
    evtA : 'value9',
    evtB : 'value8',
    evtC : 'value7',
    evtD : 'value6'
};

obj_final.push(obj_initial);

答案 2 :(得分:0)

如果想要获取其状态的“快照”,则需要在将对象添加到数组之前克隆该对象:

function addToArr(obj, arr) {
  var newObj = {};
  for (var prop in obj) {
    newObj[prop] = obj[prop];
  }
  arr.push(newObj);
}

每次要将对象推送到数组时,只需调用

即可
addToArr(obj_initial, obj_final);