按键值对映射对象javascript

时间:2016-10-06 05:23:56

标签: javascript

我有以下对象

     {
     "timetable": {
         "MONDAY": {
             "start-end0": {},
             "start-end1": {},
             "start-end2": {},
             "start-end3": {},
             "start-end4": {}
         }
     }

我需要将"start-end5"添加到MONDAY。我尝试使用点运算符星期一像timetable.monday.start-end5={}它说星期一未定义

4 个答案:

答案 0 :(得分:8)

  • MONDAY不是start-end4
  • 由于obj.timetable.MONDAY.start-end5 = {}不是有效的标识符,obj.timetable.MONDAY["start-end5"] = {}; 将无法编译;你需要使用括号语法。

因此,

{{1}}

答案 1 :(得分:3)

变量名称应遵循此限制

  • 空白&不允许使用逗号。
  • 不允许使用下划线(_)以外的特殊符号。
  • First Character应该是字母或Underscore。

试试这个

var time = {
  "timetable": {
    "MONDAY": {
      "start-end0": {},
      "start-end1": {},
      "start-end2": {},
      "start-end3": {},
      "start-end4": {}
    }
  }
}

time.timetable.MONDAY["start-end5"] = {}

DEMO

添加:

如何动态地将start-end5 start-end6 ...添加到我的地图?这可能吗?

根据值添加循环和concat字符串。

喜欢这个

var time = {
  "timetable": {
    "MONDAY": {
      "start-end0": {},
      "start-end1": {},
      "start-end2": {},
      "start-end3": {},
      "start-end4": {}
    }
  }
}
for(var i=0;i<5;i++) // set the limit of loop according to your need
  time.timetable.MONDAY["start-end"+i] = {}

DEMO

答案 2 :(得分:2)

您需要在此处使用[""]表示法,因为您的密钥名称不是camelCase或其他有效的对象密钥命名

a.timetable.MONDAY["start-end5"] = {};

答案 3 :(得分:1)

我想添加一个完全可行(且非常易读)的语法,只是为了好玩:

time["timetable"]["MONDAY"]["start-end5"] = {};