【问题标题】:Copy one array values to the the others将一个数组值复制到其他数组
【发布时间】:2018-12-06 07:52:19
【问题描述】:

我有以下 JSON 数组。我想为另一个roomsschedules 中不存在的dayOfWeek 设置时间表

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 
]

我试过了,但是没成功!!!请帮忙!!!

【问题讨论】:

  • 最终数组应该是新数组还是房间数组?还是要将 roomId2 中的日程表复制到其他房间日程表数组中?
  • @JustAMicrobe 它是一个新数组。
  • 那么如何处理包含时间表的那个?
  • @CodeManiac 需要复制到其他房间的时间表。包含roomId。请查看finalArray
  • 好吧,你没有在 finalArray 中添加 roomId 2 吗?

标签: javascript arrays loops lodash


【解决方案1】:

您可以先找到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)

【讨论】:

  • array.reduce(argument, argument) 中的参数是什么?
【解决方案2】:

如果您想简单地将其放入新数组中,只需这样做:

var schedular = data.rooms[1].schedules

【讨论】:

    【解决方案3】:

    只需遍历数组即可。

    已编辑:由评论编辑

    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);

    【讨论】:

    • 我得到roomId: 2 我需要其他人roomId13
    猜你喜欢
    • 1970-01-01
    • 2022-07-05
    • 2017-09-13
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多