Не Array#map
элементы, Array#reduce
их, вместо этого:
cards.reduce((acc, card, index) => {
return { ...acc,
[`slot_${index + 1}`]: {
id: `slot_${index + 1}`,
ownedCard: {}
}
};
}, {})
Метод .map
даст массив новых предметов на основе старых. А так как вы возвращаете объект, вы получаете массив объектов. Тем не менее, вы хотите один объект, который имеет все эти ключи. Метод .reduce
является более продвинутым (например, может делать больше вещей), и он превращает массив в «одно значение» -> следовательно уменьшает . Желаемое значение - один объект, поэтому вы можете просто объединить каждый из них.
Альтернативой использованию спредовой нотации является использование Object.assign
и повторное использование одного и того же объекта. делать клон каждый раз:
cards.reduce((acc, card, index) => {
return Object.assign{acc, {
[`slot_${index + 1}`]: {
id: `slot_${index + 1}`,
ownedCard: {}
}}
};
}, {});
Если вы хотите сохранить .map
, то вы все равно можете связать это в .reduce
:
cards.map((card, index) => {
return {
[`slot_${index + 1}`]: {
id: `slot_${index + 1}`,
ownedCard: {}
}
};
})
.reduce((acc, obj) => ({...acc, ...obj}));
или
cards.map((card, index) => {
return {
[`slot_${index + 1}`]: {
id: `slot_${index + 1}`,
ownedCard: {}
}
};
})
.reduce((acc, obj) => Object.assign(acc, obj), {});