преобразовать вложенный массив в один объект с ключевыми значениями Javascirpt - PullRequest
0 голосов
/ 20 марта 2020

У меня есть массив, который содержит вложенные массивы.

Вложенный массив может содержать несколько объектов.

const axisChoiceLoop = _.map(groupByAxisChoice) 

вывод:

[
 0: [ {age: 15, count: 242, role: "JW"}] // length 1
 1: [ {age: 21, count: 995, role: "JW"} , {age: 21, count: 137, role: "SW"} ] // length 2
 2: [ {age: 25, count: 924, role: "JW"},  {age: 25, count: 455, role: "SW"}, {age: 25, count: 32, role: "EW"} ]
]

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

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

[ 
  {age :15, JW: 242}, 
  {age: 21, JW:995, SW: 137},
  {age: 25, JW: 924, SW: 445, EW: 32}
]

Редактировать: я пробовал следующий код

const result = groupByAxisChoice.reduce(
    (obj, item) => Object.assign(obj, { [item.role]: item.count }),
    {},
  )

Какие выходы: { undefined: undefined }

Ответы [ 3 ]

1 голос
/ 20 марта 2020

Разобрался ...

const result = groupByAxisChoice.map(items =>
    items.reduce((obj, item) => Object.assign(obj, { age: item.age, [item.role]: item.count }), {}),
)
0 голосов
/ 20 марта 2020

другие решения

const b = a.map(item => {
return item.reduce((arr,curr) => {
    return {
      ...arr,
      ['age']: curr['age'],
      [curr['role']]: curr['count'],
    }
  }, {})
})
console.log(b)
0 голосов
/ 20 марта 2020

Это то, чем я закончил, я знаю, что это не оптимизировано:

var arr = [
 [ {age: 15, count: 242, role: "JW"}], // length 1
 [ {age: 21, count: 995, role: "JW"} , {age: 21, count: 137, role: "SW"} ], // length 2
 [ {age: 25, count: 924, role: "JW"},  {age: 25, count: 455, role: "SW"}, {age: 25, count: 32, role: "EW"} ]
];
var newArr = [];
arr.forEach(function(a) {
    var ob = {age: a[0].age};
    a.forEach(d => ob[d.role] = d.count); 
    newArr.push(ob);
});

Я постараюсь сделать это лучше (я не знаю, как использовать подчеркивание. js). ..

...