Переопределить индексный массив из результата API - PullRequest
2 голосов
/ 01 июня 2019

Возникла проблема с переопределением индекса массива в состоянии редукции: /

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

например,

data: 
 [{
    0: {id: 123, name: test1 },
    1: {id: 456, name: test2 },
    3: {id: 789, name: test3 },
 }]

Но я хочу изменить индекс массива на основе объекта результата.

data:
 [{
    123: {id: 123, name: test1 },
    456: {id: 456, name: test2 },
    789: {id: 789, name: test3 },
 }]

Затем сохраните их в редуктор.

Это точные данные, которые были возвращены из конечной точки.enter image description here

Я пытался

let data = action.payload.data.map(item => {
    return {
        [item.id]: item
    }
})

и получил результат

[
0: {123: {id: 123, name: 'test1'}},
1: {456: {id: 456, name: 'test2'}}
]

Любая помощь очень ценится!

Ответы [ 2 ]

1 голос
/ 01 июня 2019

Комбинация Array.map(), Object.values() и Array.reduce() должна добиться цели:

const data = [{

0: {id: 123, name: "test1" },

1: {id: 456, name: "test2" },

3: {id: 789, name: "test3" },

}];

const output = data.map(obj => Object.values(obj).reduce((acc, a) => ({ ...acc, [a.id]: a }), {}));

console.log(output);
0 голосов
/ 01 июня 2019

Вы можете использовать map и Object.entries и Object.fromEntries

let data = [{0: { id: 123,name: 'test1'},1: {id: 456,name: 'test2'}, 3: {id: 789,name: 'test3'},}]

let op = data.map(val => Object.fromEntries(Object.entries(val).map(([key, value]) => [value.id, value])))

console.log(op)

Или вы можете использовать map и Object.values и reduce

let data = [{0: { id: 123,name: 'test1'},1: {id: 456,name: 'test2'}, 3: {id: 789,name: 'test3'},}]

let op = data.map(val=> {
  let values = Object.values(val)
  let obj = values.reduce((op, inp) => {
    op[inp.id] = inp
    return op
  },{})
  return obj  
})

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