Мне нужно создать массив объектов, где каждый отдельный объект содержит только одно значение массива свойств.
Я напишу пример ввода и ожидаемого результата, так как я считаю, что вопрос довольно запутанный, но я не знаю, как это объяснить.
Первый элемент массива содержит все свойства и только первое значение массива. Каждый после первого должен иметь уникальный идентификатор и новое свойство (например, ссылку), относящееся к идентификатору первого элемента.
INPUT:
const series = [
{
id: 1,
name: 'game of thrones',
ep: ['01-01-2020','04-03-2020'] // This is the array that will split
},
{
id: 2,
name: 'stranger things',
ep: ['03-02-2020']
}
]
ОЖИДАЕМЫЙ ВЫХОД:
const newSeries = [
{
id: 1, // same id as before
name: 'game of thrones', // same name as before
ep: ['01-01-2020'] // first element of the previous array
},
{
id: 2, // untouched
name: 'stranger things',
ep: ['03-02-2020']
},
{
id: 35, // Any id
ep: ['04-03-2020'] // second element
link: 1 // This is the id of the original element
// name is not necessary
}
// If ep had 3 dates, it would make a new element
]
Я не против порядка объекта. Если бы в массиве было больше элементов, он продолжал бы, пока не будет только один.
РЕДАКТИРОВАТЬ: Забыл отправить мою попытку:
series.forEach(x => x.ep.map(epdate=>
newarray = [...newarray, {id:'some id', ep: epdate, link: x.id}]
))
Мне удается разделить массив, но я пропустите логи c, чтобы узнать, является ли элемент первым и нужно ли сохранить имя или, если после первого, и нужно иметь ссылку. Кроме того, мне нужно создать случайный идентификатор, который должен быть уникальным.
Удалось заставить его работать с этим кодом:
serie.forEach(x => {
x.ep.length > 1 ?
x.ep.map(y =>
y === x.ep[0] ?
newarray = [...newarray, {id: x.id, name: x.name, ep: y}] :
newarray = [...newarray, {id: 'id', ep: y, link: x.id}])
:
newarray = [...newarray, {...x, ep: x.ep[0]}]
})
Единственной проблемой было бы то, что идентификатор не был уникальным. Я также рекомендую проверить ответ Кальвина, так как он чрезвычайно ясен и понятен с точки зрения кода.