检查嵌套数组中元素的存在

时间:2018-12-06 05:39:08

标签: javascript arrays loops lodash

我有下面的JSON数组。我想为dayOfWeek

中不存在的schedules设置时间表
const dummy = { home1: "09:30", away: "05:30" }
const data = {
  rooms: [
    {
      roomId: 1,
      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: 2,
      schedules: []
    }
  ]
}

现在我有点困惑。我需要将相同的schedules复制到room: 2中的room: 1中,并且不存在这些副本,我想用dayOfWeek

设置虚拟

预期产量

const finalArray = [
  //room: 1
  { home1: "09:30", dayOfWeek: 2, away: "05:30", roomId: 1 },  //dummy
  { home1: "09:30", dayOfWeek: 3, away: "05:30", roomId: 1 },   //dummy
  { home1: "09:30", dayOfWeek: 4, away: "05:30", roomId: 1 },   //dummy
  { home1: "09:30", dayOfWeek: 6, away: "05:30", roomId: 1 }    //dummy

  //room: 2
  { home1: "05:05", dayOfWeek: 1, away: "20:30", roomId: 2 }, //schedules from room1
  { home1: "06:05", dayOfWeek: 5, away: "21:30", roomId: 2 }, //schedules from room1
  { home1: "07:05", dayOfWeek: 7, away: "22:30", roomId: 2 }, //schedules from room1 
  { home1: "09:30", dayOfWeek: 2, away: "05:30", roomId: 2 }, //dummy
  { home1: "09:30", dayOfWeek: 3, away: "05:30", roomId: 2 },//dummy
  { home1: "09:30", dayOfWeek: 4, away: "05:30", roomId: 2 },//dummy
  { home1: "09:30", dayOfWeek: 6, away: "05:30", roomId: 2 }//dummy
]

我尝试过的事情

我可以从时间表的第一个元素设置虚拟数据。但是不知道如何检查rooms.schedules数组中的每个元素

const dummy = _.first(data.rooms[0].schedules) ? _.first(rooms[0].schedules) : { 'home1': '05:30', 'home2': '09:30', 'away': '17:30', 'sleep': '20:30' }

const finalArray = []
let output = []
for (let room of data.rooms) {
  let days = []
  room.schedules.map(s => days.push(parseInt(s.dayOfWeek)))
  days = new Set(days)
  for(let i = 1; i <= 7; i++) {
    if(!days.has(i)) finalArray.push({ ...obj, dayOfWeek: i, id: room.id })
  }
}

1 个答案:

答案 0 :(得分:0)

<TouchableOpacity
style={ this.state.active? styles.btnActive : styles.btn}
onPress={() => this.setState({active: !this.state.active})}>

</TouchableOpacity>