Объединить объекты массива разных значений в новый объект

У меня есть 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'
 }
]

Я попытался объединить/объединить массивы и другие решения, которые смог найти, но не смог найти ничего более близкого к желаемому результату.

Я знаю, что было несколько вопросов о слиянии объектов массива, но я не смог найти решения, которое соответствовало бы моему требованию.

Любая помощь будет высоко оценена. Спасибо.

почему 10-11 в день на 3-м массиве. также может использовать карту и распространять и получать доступ к другим массивам, используя индекс

cmgchess 12.04.2023 08:30

извините, это была опечатка, я обновил свой вопрос.

ankitjt 12.04.2023 08:34

Отвечает ли это на ваш вопрос? Создать объект из массива ключей и массива значений

jsejcksn 26.04.2023 22:40
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
66
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Попробуйте эти изменения,

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, а не создает новые объекты.

T.J. Crowder 12.04.2023 08:35

Да, я проверил ваш пост и нашел много полезного. Спасибо за ваше предложение :) Я обновил свой ответ.

Hetal N 12.04.2023 08:40

Вы все еще используете map без использования возвращаемого значения. См. ответ cmgchess о том, как правильно использовать map.

T.J. Crowder 12.04.2023 09:33
Ответ принят как подходящий

вы можете использовать карту и индекс для доступа к другим массивам.

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 12.04.2023 08:42

@ankitjt какую часть ты не понимаешь. map используется для преобразования массива. поэтому здесь я преобразовываю массив дат в массив объектов, содержащих также два других поля. чтобы получить другие 2 поля, я использую индекс, который доступен на карте

cmgchess 12.04.2023 08:47

@ankitjt надеюсь, это было ясно. дайте мне знать, если возникнут другие вопросы

cmgchess 12.04.2023 10:02

Вы можете использовать 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);

Другие вопросы по теме