Скопируйте значения одного массива в другие - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть ниже массив JSON.Я хочу установить расписания для dayOfWeek, которых нет внутри schedules других rooms

const data = {
  rooms: [
    {
      roomId: 1,
      schedules: []
    },
    {
      roomId: 2,
      schedules: [
        { home1: "05:05", dayOfWeek: 1, away: "20:30" },
        { home1: "06:05", dayOfWeek: 5, away: "21:30" },
        { home1: "07:05", dayOfWeek: 7, away: "22:30" }
      ]
    },
    {
      roomId: 3,
      schedules: []
    }
  ]
}

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

ожидаемый результат

const finalArray = [
  { home1: "05:05", dayOfWeek: 1, away: "20:30", roomId: 1 }, //schedules from room2
  { home1: "06:05", dayOfWeek: 5, away: "21:30", roomId: 1 }, //schedules from room2
  { home1: "07:05", dayOfWeek: 7, away: "22:30", roomId: 1 }, //schedules from room2 

  { home1: "05:05", dayOfWeek: 1, away: "20:30", roomId: 3 }, //schedules from room2
  { home1: "06:05", dayOfWeek: 5, away: "21:30", roomId: 3 }, //schedules from room2
  { home1: "07:05", dayOfWeek: 7, away: "22:30", roomId: 3 }, //schedules from room2 
]

Я пытался, но не смог заставить его работать !!!Пожалуйста, помогите !!!

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

, если вы хотите просто поместить его в новый массив, просто сделайте это:

var schedular = data.rooms[1].schedules
0 голосов
/ 06 декабря 2018

Сначала вы можете найти source of truth room, а затем использовать Array.reduce для извлечения / копирования расписаний другим:

const data = { rooms: [ { roomId: 1, schedules: [] }, { roomId: 2, schedules: [ { home1: "05:05", dayOfWeek: 1, away: "20:30" }, { home1: "06:05", dayOfWeek: 5, away: "21:30" }, { home1: "07:05", dayOfWeek: 7, away: "22:30" } ] }, { roomId: 3, schedules: [] } ] }

const theRoom = data.rooms.find(x => x.schedules.length)
const result = data.rooms.reduce((r,{roomId, schedules}) => {
  if(roomId != theRoom.roomId)
     r.push(...theRoom.schedules.map(x => ({ roomId, ...x })))
  return r
}, [])
console.log(result)
0 голосов
/ 06 декабря 2018

Просто просмотрите массив.

РЕДАКТИРОВАНИЕ: отредактировано комментарием

const data = {
  rooms: [
    {
      roomId: 1,
      schedules: []
    },
    {
      roomId: 2,
      schedules: [
        { home1: "05:05", dayOfWeek: 1, away: "20:30" },
        { home1: "06:05", dayOfWeek: 5, away: "21:30" },
        { home1: "07:05", dayOfWeek: 7, away: "22:30" }
      ]
    },
    {
      roomId: 3,
      schedules: []
    }
  ]
}

var roomIdWithSchedules = null;
var schedulesOfRoomWithRoomIdWithSchedules = [];
for(var i = 0; i < data.rooms.length; i++) {
  if(data.rooms[i].schedules && data.rooms[i].schedules.length) {
    roomIdWithSchedules = data.rooms[i].roomId;
    schedulesOfRoomWithRoomIdWithSchedules = data.rooms[i].schedules.map(function(x) {
      return JSON.parse(JSON.stringify(x));
    });
    break;
  }
}

var finalArray = [];
if(roomIdWithSchedules != null) {
  for(var i = 0; i < data.rooms.length; i++) {
    if(roomIdWithSchedules === data.rooms[i].roomId) {
      continue;
    }
    
    for(var j = 0; j < schedulesOfRoomWithRoomIdWithSchedules.length; j++) {
      var item = JSON.parse(JSON.stringify(schedulesOfRoomWithRoomIdWithSchedules[j]));
      item.roomId = data.rooms[i].roomId;
      finalArray.push(item)
    }
  }
}

console.log(finalArray);
...