Программно добавление свойств к объектам в Javascript - PullRequest
0 голосов
/ 28 июня 2018

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

Обычно, чтобы применить свойства к объекту, я бы применил его в этом контексте:

var a = []
var len = result[0].length
for(m=0; m < len; m++){
  a[m] = "b" + m // creates b1-b17 usually, but if the results are shorter it will create them equal to the length of the results
}
const values = {}
for(g=0; g<len; g++){
  values[a[g]] = [];
}

Это добавит пустой массив к каждому свойству от "b1" до "b17" в обычном режиме, но будет динамическим, если результаты будут короче.

Теперь я хотел бы сделать то же самое с этим кодом, но только внутри части "return". Можно ли как-нибудь это назвать и ввести эти переменные программно, как я это делал ранее?

const rowData = tableData.map(result => {
  for(var h in a){
    values[a[h]].push(result[h]);
  }
  return {
    //I want to put properties in here programmatically and dynamically like I did previously
  }
})

Спасибо, ребята, что уделили время!

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете превратить массив типа ['data1', 'data2', 'data3', 'data4'] в объект с динамическими ключами типа column1, используя reduce(). Например:

let arr = ['data1', 'data2', 'data3', 'data4']
let obj = arr.reduce((a, c, i) => (a['column' + (i + 1)] = c, a), {} )

console.log(obj)

Имея это в виду, имея массив таких массивов, вы можете объединить его с map(), чтобы получить окончательный результат:

let tableData = [['data1', 'data2', 'data3', 'data4'], ['data11', 'data22', 'data33', 'data44']]

// for each array in tableData make an object with reduce and  add it to the returned array   
let result = tableData.map(arr => arr.reduce((a, c, i) => (a['column' + (i + 1)] = c, a), {} ))

console.log(result)
...