在Javascript中创建动态json对象[关闭]

问题描述 投票:0回答:1

我已经创建了这个对象结构

[ [ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' ] 
, [ [ { start_time: '02:00', end_time: '06:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    ] 
  , [ { start_time: '02:00', end_time: '06:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    ] 
  , [ { start_time: '02:00', end_time: '06:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    ] 
  , [ { start_time: '02:00', end_time: '06:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    ] 
  , [ { start_time: '02:00', end_time: '06:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    ] 
  , [ { start_time: '02:00', end_time: '06:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    ] 
  , [ { start_time: '02:00', end_time: '06:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
  ] ] 
, [ [ 'morning', 'afternoon', 'evening' ]
  , [ 'morning', 'afternoon', 'evening' ]
  , [ 'morning', 'afternoon', 'evening' ]
  , [ 'morning', 'afternoon', 'evening' ] 
  , [ 'morning', 'afternoon', 'evening' ]
  , [ 'morning', 'afternoon', 'evening' ] 
  , [ 'morning', 'afternoon', 'evening' ]
] ] 

使用下面的代码

var days            = []
  , slotstime       = []
  , slotsMonday     = []
  , slotsTuesday    = []
  , slotsWednesday  = []
  , slotsThursday   = []
  , slotsFriday     = []
  , slotsSaturday   = []
  , slotsSunday     = []
  , slots           = []
  , result          = []
  , mondayTime      = []
  , tuesdayTime     = []
  , wednesdayTime   = []
  , thursdayTime    = []
  , fridayTime      = []
  , saturdayTime    = []
  , sundayTime      = []
  ;
if (this.MondayChecked) {
  days.push('Monday');
  mondayTime.push({
    start_time: this.appSetting.morningStartTime,
    end_time:   this.appSetting.morningEndTime
    });
  mondayTime.push({
    start_time: this.appSetting.afternoonStartTime,
    end_time:   this.appSetting.afternoonEndTime
    });
  mondayTime.push({
    start_time: this.appSetting.nightStartTime,
    end_time:   this.appSetting.nightEndTime
    });
  slotsMonday.push('morning');
  slotsMonday.push('afternoon');
  slotsMonday.push('evening');
  slotstime  .push(mondayTime);
}
if (this.TuesdayChecked) {
  days.push('Tuesday');
  tuesdayTime.push({
    start_time: this.appSetting.morningStartTime,
    end_time:   this.appSetting.morningEndTime
    });
  tuesdayTime.push({
    start_time: this.appSetting.afternoonStartTime,
    end_time:   this.appSetting.afternoonEndTime
    });
  tuesdayTime.push({
    start_time: this.appSetting.nightStartTime,
    end_time:   this.appSetting.nightEndTime
    });
  slotsTuesday.push('morning');
  slotsTuesday.push('afternoon');
  slotsTuesday.push('evening');
  slotstime   .push(tuesdayTime);

}
if (this.WednesdayChecked) {
  days.push('Wednesday');
  wednesdayTime.push({
    start_time: this.appSetting.morningStartTime,
    end_time:   this.appSetting.morningEndTime
  });
  wednesdayTime.push({
    start_time: this.appSetting.afternoonStartTime,
    end_time:   this.appSetting.afternoonEndTime
  });
  wednesdayTime.push({
    start_time: this.appSetting.nightStartTime,
    end_time:   this.appSetting.nightEndTime
  });
  slotsWednesday.push('morning');
  slotsWednesday.push('afternoon');
  slotsWednesday.push('evening');
  slotstime.push(wednesdayTime);
}
if (this.ThursdayChecked) {
  days.push('Thursday');
  thursdayTime.push({
    start_time: this.appSetting.morningStartTime,
    end_time:   this.appSetting.morningEndTime
    });
  thursdayTime.push({
    start_time: this.appSetting.afternoonStartTime,
    end_time:   this.appSetting.afternoonEndTime
    });
  thursdayTime.push({
    start_time: this.appSetting.nightStartTime,
    end_time:   this.appSetting.nightEndTime
    });
  slotsThursday.push('morning');
  slotsThursday.push('afternoon');
  slotsThursday.push('evening');
  slotstime.push(thursdayTime);
}
if (this.FridayChecked) {
  days.push('Friday');
  fridayTime.push({
    start_time: this.appSetting.morningStartTime,
    end_time:   this.appSetting.morningEndTime
    });
  fridayTime.push({
    start_time: this.appSetting.afternoonStartTime,
    end_time:   this.appSetting.afternoonEndTime
    });
  fridayTime.push({
    start_time: this.appSetting.nightStartTime,
    end_time:   this.appSetting.nightEndTime
    });
  slotsFriday.push('morning');
  slotsFriday.push('afternoon');
  slotsFriday.push('evening');
  slotstime  .push(fridayTime);
}
if (this.SaturdayChecked) {
  days.push('Saturday');
  saturdayTime.push({
    start_time: this.appSetting.morningStartTime,
    end_time:   this.appSetting.morningEndTime
    });
  saturdayTime.push({
    start_time: this.appSetting.afternoonStartTime,
    end_time:   this.appSetting.afternoonEndTime
    });
  saturdayTime.push({
    start_time: this.appSetting.nightStartTime,
    end_time:   this.appSetting.nightEndTime
    });
  slotsSaturday.push('morning');
  slotsSaturday.push('afternoon');
  slotsSaturday.push('evening');
  slotstime    .push(saturdayTime);
}
if (this.SundayChecked) {
  days.push('Sunday');
  sundayTime.push({
    start_time: this.appSetting.morningStartTime,
    end_time:   this.appSetting.morningEndTime
    });
  sundayTime.push({
    start_time: this.appSetting.afternoonStartTime,
    end_time:   this.appSetting.afternoonEndTime
    });
  sundayTime.push({
    start_time: this.appSetting.nightStartTime,
    end_time:   this.appSetting.nightEndTime
    });
  slotsSunday.push( 'afternoon' );
  slotsSunday.push( 'morning'   );
  slotsSunday.push( 'evening'   );
  slotstime  .push( sundayTime  );
}
slots .push( slotsMonday    );
slots .push( slotsTuesday   );
slots .push( slotsWednesday );
slots .push( slotsThursday  );
slots .push( slotsFriday    );
slots .push( slotsSaturday  );
slots .push( slotsSunday    );
result.push( days           );
result.push( slotstime      );
result.push( slots          );
result of console variable       
console.log(result);

但我想制作这样的动态结构

{ Days: 
  { MONDAY: 
    { Morning:   { start_time: this.appSetting.morningStartTime   } 
    , Afternoon: { start_time: this.appSetting.afternoonStartTime } 
    , Evening:   { start_time: this.appSetting.nightStartTime     } 
    } 
  , TUESDAY: 
    { Morning:   { start_time: this.appSetting.morningStartTime   } 
    , Afternoon: { start_time: this.appSetting.afternoonStartTime } 
    , Evening:   { start_time: this.appSetting.nightStartTime     } 
    } 
  , WEDNESDAY: 
    { Morning:   { start_time: this.appSetting.morningStartTime   } 
    , Evening:   { start_time: this.appSetting.nightStartTime     } 
    } 
  , THURSDAY: 
    { Evening:   { start_time: this.appSetting.nightStartTime     } 
    } 
  , FRIDAY: 
    { Morning:   { start_time: this.appSetting.morningStartTime   } 
    , Afternoon: { start_time: this.appSetting.afternoonStartTime } 
    , Evening:   { start_time: this.appSetting.nightStartTime     } 
    } 
  , SATURDAY: 
    { Morning:   { start_time: this.appSetting.morningStartTime   } 
    , Afternoon: { start_time: this.appSetting.afternoonStartTime } 
    , Evening:   { start_time: this.appSetting.nightStartTime     } 
    } 
  , SUNDAY: 
    { Morning:   { start_time: this.appSetting.morningStartTime   } 
    , Afternoon: { start_time: this.appSetting.afternoonStartTime } 
    , Evening:   { start_time: this.appSetting.nightStartTime     } 
} } } 

但是这个结构应该根据上述条件动态创建,以便我可以访问天数及其时段计时。

任何解决方案谢谢

javascript json object
1个回答
0
投票

使用方括号[],您可以动态分配属性名称。如果我正确理解你的问题,你可以做这样的事情。

var data = [ [ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' ] 
, [ [ { start_time: '02:00', end_time: '06:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    ] 
  , [ { start_time: '02:00', end_time: '06:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    ] 
  , [ { start_time: '02:00', end_time: '06:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    ] 
  , [ { start_time: '02:00', end_time: '06:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    ] 
  , [ { start_time: '02:00', end_time: '06:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    ] 
  , [ { start_time: '02:00', end_time: '06:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    ] 
  , [ { start_time: '02:00', end_time: '06:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
    , { start_time: '00:00', end_time: '00:00' } 
  ] ] 
, [ [ 'morning', 'afternoon', 'evening' ]
  , [ 'morning', 'afternoon', 'evening' ]
  , [ 'morning', 'afternoon', 'evening' ]
  , [ 'morning', 'afternoon', 'evening' ] 
  , [ 'morning', 'afternoon', 'evening' ]
  , [ 'morning', 'afternoon', 'evening' ] 
  , [ 'morning', 'afternoon', 'evening' ]
] ] ;

var days = data[0];
var times = data[1];
var partOfDays = data[2];

var newData = { Days : {}};

for(var dayIndex in days){
    var day = {};
  newData.Days[days[dayIndex]] = day;
  for(var partOfDayIndex in partOfDays[dayIndex]){
    day[partOfDays[dayIndex][partOfDayIndex]] = {
      start_time: times[dayIndex][partOfDayIndex].start_time
    };
  }
}

console.log(newData);
  

© www.soinside.com 2019 - 2024. All rights reserved.