У меня есть 3 объекта массива-
dates = [{date: '12/04/2023'}, {date: '13/04/2023'}]
days = [{day: 'Monday'}, {day: 'Tuesday'}]
time = [{time: '09-10'}, {time: '10-11'}]
окончательный массив должен быть таким:
final = [
{
date: '12/04/2023',
day: 'Monday',
time: '09-10'
},
{
date: '13/04/2023',
day: 'Tuesday',
time: '10-11'
}
]
Я попытался объединить/объединить массивы и другие решения, которые смог найти, но не смог найти ничего более близкого к желаемому результату.
Я знаю, что было несколько вопросов о слиянии объектов массива, но я не смог найти решения, которое соответствовало бы моему требованию.
Любая помощь будет высоко оценена. Спасибо.
извините, это была опечатка, я обновил свой вопрос.
Отвечает ли это на ваш вопрос? Создать объект из массива ключей и массива значений
Попробуйте эти изменения,
dates = [{date: '12/04/2023'}, {date: '13/04/2023'}]
days = [{day: 'Monday'}, {day: 'Tuesday'}]
time = [{time: '09-10'}, {time: '10-11'}]
const result = dates.map((d,index) => {
d.day = days[index].day;
d.time = time[index].time;
})
console.info(result)
Пожалуйста, не злоупотребляйте map
, когда вы не используете созданный им массив. Если вам просто нужен цикл, просто используйте цикл (или forEach
). Подробнее в моем посте здесь. (Но вместо того, чтобы делать [...dates]
, а затем map
, вы могли бы правильно использовать map
на dates
...) Также, вероятно, стоит убедиться, что ОП понимает, что это изменяет объекты в массиве dates
, а не создает новые объекты.
Да, я проверил ваш пост и нашел много полезного. Спасибо за ваше предложение :) Я обновил свой ответ.
Вы все еще используете map
без использования возвращаемого значения. См. ответ cmgchess о том, как правильно использовать map
.
вы можете использовать карту и индекс для доступа к другим массивам.
const dates = [{date: '12/04/2023'}, {date: '13/04/2023'}]
const days = [{day: 'Monday'}, {day: 'Tuesday'}]
const time = [{time: '09-10'}, {time: '10-11'}]
const res = dates.map(({date},i) => ({date, day: days[i].day, time: time[i].time}))
console.info(res)
Это работает отлично, не могли бы вы кратко объяснить логику. Спасибо
@ankitjt какую часть ты не понимаешь. map используется для преобразования массива. поэтому здесь я преобразовываю массив дат в массив объектов, содержащих также два других поля. чтобы получить другие 2 поля, я использую индекс, который доступен на карте
@ankitjt надеюсь, это было ясно. дайте мне знать, если возникнут другие вопросы
Вы можете использовать for loop
для простого чтения и повышения производительности.
dates = [{date: '12/04/2023'}, {date: '13/04/2023'}]
days = [{day: 'Monday'}, {day: 'Tuesday'}]
time = [{time: '09-10'}, {time: '10-11'}]
combined = []
for(i = 0; i < dates.length; i++){
combined.push({
date: dates[i].date,
day: days[i].day,
time: time[i].time
})
}
console.info(combined)
Кроме того... есть этот пост, который может помочь вам с повторяющейся датой, и вы хотели сделать ее уникальной. Создать новый массив из другого массива
Использование цикла for.
const final = [];
for (let date = 0; date < dates.length; date++) {
for (let day = 0; day < days.length; day++) {
for (let t = 0; t < time.length; t++) {
const tmp = {
date: dates[date].date,
day: days[day].day,
time: time[t].time
};
result.push(tmp);
}
}
}
console.info(final);
Я думаю, что у @cmgchess есть лучший ответ,
Просто хотел поделиться интересным решением для этого
с помощью Array.prototype.reduce()
и остатка индекса массива и длины массива:
const dates = [{date: '12/04/2023'}, {date: '13/04/2023'}];
const days = [{day: 'Monday'}, {day: 'Tuesday'}];
const time = [{time: '09-10'}, {time: '10-11'}];
const size = dates.length;
const res = [...dates, ...days, ...time].flat().reduce((acc, curr, index) => {
acc[index % size] = {
...acc[index % size],
...curr
}
return acc;
}, []);
console.info(res);
почему 10-11 в день на 3-м массиве. также может использовать карту и распространять и получать доступ к другим массивам, используя индекс