skip to Main Content

I have 3 array objects-

dates = [{date: '12/04/2023'}, {date: '13/04/2023'}]
days = [{day: 'Monday'}, {day: 'Tuesday'}]
time = [{time: '09-10'}, {time: '10-11'}]

the final array should be like:

final = [
{
 date: '12/04/2023',
 day: 'Monday',
 time: '09-10'
},
{
 date: '13/04/2023',
 day: 'Tuesday',
 time: '10-11'
 }
]

I tried merging/concat the arrays and other solutions that I could find but couldn’t find anything closer to my desired result.

I know there have been multiple questions on merging array objects but I haven’t been able to find any solution that fits my requirement.

Any help would highly appreciated.Thanks.

5

Answers


  1. Try this changes,

    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.log(result)
    
    Login or Signup to reply.
  2. you can use map and the index to access other arrays.

    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.log(res)
    Login or Signup to reply.
  3. You can use for loop for simple reading and better performance

    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.log(combined)

    Also… there is this post that might help you with repeated date and you wanted to make it unique.
    Create New array from another array

    Login or Signup to reply.
  4. Using a for loop.

    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.log(final);
    
    Login or Signup to reply.
  5. I think @cmgchess has the best answer,
    Just wanted to share an interesting solution for this
    by using Array.prototype.reduce() and the remainder of the array’s index and the length of the array:

    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.log(res);
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search