если вы хотите вернуть категории без изменений (но с другой ссылкой), вы должны сделать это следующим образом:
categories: state.account.categories.reduce((acc, cat) => {
return [...acc, cat];
}, [])
В вашем коде значение аккумулятора - это объект с реквизитами категорий, который постоянно перезаписывается другим элементом из массива, поэтому в итоге присутствует только последний элемент.
Давайте отложим реакцию и избыточность и сосредоточимся на функции reduce
. Он принимает массив и возвращает что-то другое, используя функцию, называемую редуктором.
В следующем примере:
const array = [{num: 1}, {num: 2}];
вы можете взять каждый из элементов массива и объединить их свойства:
array.reduce((acc, item) => ({...acc, ...item}), {})
это равно
Object.assign({}, array[0], array[1]);
или
{...array[0], ...array[1]}
, и результат равен {num: 2}
, (сначала был пустой объект {}
, затем {num: 1}
и наконец {...{num: 1}, ...{num: 2}}
дал {num: 2}
Неважно, если вы заключите его в массив, это все равно один объект, созданный путем объединения всех объектов в массиве
Если вам нужна копия массива. Это можно сделать так:
array.reduce((acc, item) => [...acc, item], []);
Это равно
[].concat(...array);