итеративное добавление к массиву объектов в Javascript - PullRequest
1 голос
/ 12 августа 2011

Я пытаюсь создать объект итеративно со следующей структурой:

    var series = {
        data: [{
            name:  'some text',
            y: 0
        },
        {
            name:  'some other text',
            y: 1
        }]
    }

Ниже приведен мой код:

var series = {
    data: []    
};

var datatemp = {
    y: '',
    name: ''
};

for (var i=0; i<10; i++) {
    datatemp.y = i;
    datatemp.name = "namelabel"+i;
    series.data.push(datatemp);
}

Но я получаю окончательные значенияof series.data [i] .y и series.data [i] .name во всех элементах массива, а не в том, что я ожидаю, что является разными значениями в качестве счетчика, который я повторяю.Буду признателен за ваше руководство о том, что я делаю неправильно.Заранее спасибо!

Ответы [ 4 ]

4 голосов
/ 12 августа 2011

Чтобы добавить то, что сказал Мимисбрунн, вы могли бы сделать это так:

for (var i=0; i<10; i++) {
    series.data.push({y: i, name: "namelabel"+i});
}

Нет необходимости в промежуточной переменной.

1 голос
/ 12 августа 2011

Для каждой итерации цикла for вам нужно создавать новый тип данных, в противном случае вы просто каждый раз передаете один и тот же объект в массив и изменяете его значения.

for (var i=0; i<10; i++) {
    var datatemp = {};
    datatemp.y = i;
    datatemp.name = "namelabel"+i;
    series.data.push(datatemp);
}
0 голосов
/ 12 августа 2011

Объекты передаются по ссылке в javascript, в вашем примере у вас есть только один объект, на который ссылается имя datatemp, каждый раз, когда вы присваиваете новое значение одному из его членов, старый член перезаписывается, поэтому у вас естьсоздать новый объект для каждой итерации цикла.

0 голосов
/ 12 августа 2011
var series = {
    data: []    
};



for (var i=0; i<10; i++) {
    var datatemp={};
    datatemp.y = i;
    datatemp.name = "namelabel"+i;
    series.data.push(datatemp);
}

for (var i=0; i<10; i++) {
    console.log(series.data[i].y);
        console.log(series.data[i].name);
}

http://jsfiddle.net/Vp8EV/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...