Объект с динамическими атрибутами из таблицы Javascript - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть таблица, в которой в первой строке указаны имена столбцов (их переменное число), и я хочу преобразовать эту таблицу в объект в javascript.

Пример таблицы может выглядеть следующим образом:

Ticket  | Created    | State
--------+------------+-------
#102314 | 2018-11-12 |  1
#102315 | 2018-11-14 |  5

И если я захочу поместить его в объект, он будет выглядеть так:

var toReturn = [];
var table = [['Ticket', 'Created', 'State'],
            ['#102314', 2018-11-12, 1],
            ['#102315', 2018-11-14, 5]];
           /*This is how i recieve data from google Spreadsheets*/
for(var k = 1; k < table.length; k++) {
  toReturn.push({'Ticket': table[k][0],
                 'Created': table[k][1],
                 'State': table[k][2]});
} //This is working for me

// But I'm trying something like this and it not working
for(var k = 1; k < table.length; k++) {
    toReturn.push({table[0][0]: table[k][0],
                   table[0][1]: table[k][1],
                   table[0][2]: table[k][2]});
}

И конечная цель - создать объект со всеми атрибутами из таблицы, независимо от того, сколько столбцов в таблице.

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Я думаю, что самый простой способ - создать циклы, как сказал Андреас, и получить имена ключей в каждом цикле.

Примерно так:

for (var k = 1; k < table.length; k++){
    obj = {}
    for (var j = 0; j < table[k].length; j++){
        obj[table[0][j]] = table[k][j]
    }
    toReturn.push(obj)
}
0 голосов
/ 17 ноября 2018

Одним из возможных способов может быть использование Array.prototype.reduce()

Метод reduce() выполняет функцию редуктора (которую вы предоставляете) для каждого члена массива, в результате чего получается одно выходное значение.

Функция редуктор имеет четыре параметра:

  1. Аккумулятор (акк)
  2. Текущее значение (ток)
  3. Текущий индекс (idx)
  4. Source Array (src)

Возвращаемое значение функции присваивается аккумулятору, значение которого запоминается на каждой итерации в массиве и, в конечном итоге, становится окончательным единственным результирующим значением.

var table = [
  ['Ticket', 'Created', 'State'],
  ['#102314', '2018-11-12', 1],
  ['#102315', '2018-11-14', 5]
];

var transformedTable = table.reduce(function(result, currentRow, rowIndex) {
  // skip the "header row"
  if (rowIndex === 0) {
    return result;
  }

  // create the actual row from the "header row" and the values of the current row
  var row = table[0].reduce(function(resultRow, caption, captionIndex) {
    resultRow[caption] = currentRow[captionIndex];
    return resultRow;
  }, {})

  result.push(row);

  return result;
}, []);

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