Как использовать два массива для создания массива литералов объекта в JavaScript

Я хочу создать массив литералов объекта, подобный этому

var data = [
      {name: 'John A. Smith', state: 'CA'},
      {name: 'Joan B. Jones', state: 'NY'}
    ];

name и state хранятся в массиве columns.

John A. Smith и CA хранятся в массиве data.

Я пытаюсь писать так, но мне показалось, что я не могу использовать columns[i] до :,

var temp = [];
for (var i = 0; i < data.length; i++) {
    temp.push({
        columns[i]: data[i]
    });
}

Спасибо, Lochemage, для моих колонок это работает. Вот мой весь код:

var temp = [];
var tempObj = {};
for (var i=0; i<colHeads.length; i++) { // columns
    var dataArr = '$colData.get(i)'.split(",");
    for (var j = 0; j < dataArr.length; ++j) { // data
        tempObj[colHeads[i]] = dataArr[j];
    }
    temp.push(tempObj);
}

Этот '$colData.get(i)', кажется, работает с прямым индексом (0, 1, ..), но не работает с i.

Кстати, $colData - это строковый массив из разметки скорости; он содержит строки. В этой конкретной задаче он содержит

[0]: CA, NY
[1]: John A. Smith, Joan B. Jones

И мне нужен окончательный результат - массив data, указанный вверху.


person Casper    schedule 23.07.2014    source источник


Ответы (1)


Вместо этого вы должны использовать оператор скобки со значением столбца:

var temp = [];
var tempObj = {};
for (var i = 0; i < data.length; ++i) {
  tempObj[columns[i]] = data[i];
}
temp.push(tempObj);
person Lochemage    schedule 23.07.2014
comment
будет ли это значение tempObj[columns[i]] заменяться на каждой итерации? - person Casper; 23.07.2014
comment
Использование оператора скобок для объекта аналогично выполнению чего-то вроде tempObj.name = data[i], за исключением того, что он позволяет вам указать переменную свойства из строкового значения, такого как 'name'. В конце концов, использование tempObj['name'] = 'foo' точно такое же, как использование tempObj.name = 'foo'. - person Lochemage; 23.07.2014
comment
спасибо, но я думаю, что моего вопроса здесь недостаточно, я разместил еще один вопрос здесь - person Casper; 23.07.2014