将FB小时json对象转换为json对象数组

时间:2017-08-31 00:09:20

标签: javascript arrays json

我在Facebook图形资源管理器中有以下几小时的json对象:

"hours": {
        "mon_1_open": "10:00",
        "mon_1_close": "16:00",
        "mon_2_open": "11:00",
        "mon_2_close": "12:00",
        "tue_1_open": "06:00",
        "tue_1_close": "15:00",
        "wed_1_open": "06:00",
        "wed_1_close": "15:00",
        "thu_1_open": "06:00",
        "thu_1_close": "15:00",
        "fri_1_open": "06:00",
        "fri_1_close": "15:00",
        "sat_1_open": "08:00",
        "sat_1_close": "15:00",
        "sun_1_open": "08:00",
        "sun_1_close": "15:00"
      }

我正在尝试将其转换为以下格式:

"hours": [ {
          "weekDay": 1,  // mon_1
          "startTime": "10:00",
          "endTime": "16:00"
        },
          {
          "weekDay": 1,  //mon_2
          "startTime": "11:00",
          "endTime": "12:00"
        },
          {
          "weekDay": 2, //tues_1
          "startTime": "06:00",
          "endTime": "15:00"
        }

        ]

有没有办法有效地做到这一点?或者我是否必须为每个打开和关闭对迭代两次列表?

1 个答案:

答案 0 :(得分:1)

var hours = {
    "mon_1_open": "10:00",
    "mon_1_close": "16:00",
    "mon_2_open": "11:00",
    "mon_2_close": "12:00",
    "tue_1_open": "06:00",
    "tue_1_close": "15:00",
    "wed_1_open": "06:00",
    "wed_1_close": "15:00",
    "thu_1_open": "06:00",
    "thu_1_close": "15:00",
    "fri_1_open": "06:00",
    "fri_1_close": "15:00",
    "sat_1_open": "08:00",
    "sat_1_close": "15:00",
    "sun_1_open": "08:00",
    "sun_1_close": "15:00"
};

var oneWeekDay = {}, newHours = [], start = "", end = "", numWeekDay = 0;
var keys = "";
for (x in hours) {
    if(keys.indexOf(x) != -1) {
        continue;
    }
    switch (x.substr(0, 3)) {
        case "mon":
            numWeekDay = 1;
            break;
        case "tue":
            numWeekDay = 2;
            break;
        case "wed":
            numWeekDay = 3;
            break;
        case "thu":
            numWeekDay = 4;
            break;
        case "fri":
            numWeekDay = 5;
            break;
        case "sat":
            numWeekDay = 6;
            break;
        case "sun":
            numWeekDay = 7;
            break;
        default:
            numWeekDay = 0;
    }

    start = x.substr(0, 6) + "open";
    end = x.substr(0, 6) + "close";

    oneWeekDay = {
        "weekDay": numWeekDay,
        "startTime": hours[start],
        "endTime": hours[end]
    };
    newHours.push(oneWeekDay);
    keys += start + ",";
    keys += end + ",";
}
console.log(newHours);