Синтаксис распространения Javascript сливается в объекте, но добавляется в массив - PullRequest
0 голосов
/ 01 сентября 2018

У меня странная ситуация. У меня есть 2 объекта: state.result, который является массивом объектов, и data.catalogs, который является массивом объектов, подобных state.result.

Я хочу создать чистую функцию, чтобы возвращать копии обоих слитых (в редукторном редукторе). Если я бегу:

 {
    ...state,
    result: {...state.result, ...data.catalogs}
  }

Все в порядке, и 4 элемента в state.result объединены с 1 элементом в data.catalogs, и мне возвращается значение 4 элемента. Проблема в том, что я хочу массив элементов, и это дает мне и объект с 4 свойствами, связанными с элементами.

Если я бегу:

  {
    ...state,
    result: [...state.result, ...data.catalogs]
  }

Это дает мне массив элементов, которые я хочу, но вместо того, чтобы объединить их, он добавляет их, поэтому я получаю массив из 5 элементов (дубликат элемента в state.result и data.catalogs).

Почему это происходит и как я могу объединить элементы в массиве?

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Вам придется обрабатывать слияние массивов отдельно

const x = [{id: 1}, {id: 2, name: 'two'}, {}];
const y = [{name: 'one'}, {}, {id: 3, name: 'three'}];

const z = x.map((e, index) => Object.assign({}, {...e, ...y[index]}));

// z = [{id: 1, name: 'one'}, {id: 2, name: 'two'}, {id: 3, name: 'three'}]
0 голосов
/ 01 сентября 2018
    {
    ...state,
    result: {...state.result, ...data.catalogs}
  }

Как насчет того, чтобы использовать это, затем взять нужные значения с помощью Object.values(results), если хотите, вы можете .map().

Надеюсь, это поможет.

...