使用字符串变量的值作为Javascript中现有对象的'索引'

问题描述:

我正在使用Javascript。使用字符串变量的值作为Javascript中现有对象的'索引'

var myobj = { 
       "one": { 
         "name" : "paul", 
         "no" : "A123" 
       }, 
       "two": { 
         "name" : "mike", 
         "no" : "B456" 
       }, 
       "three": { 
         "name" : "andy", 
         "no" : "C789" 
       }, 
}; 

我还有一个目标newitem,我想插入

var newIndex = "four"; 
var newItem = { 
       "name" : "leo", 
       "no" : "D987" 
       }; 

如何插入newItem到使用newIndex为 '索引' myobj

顺便说一句,newIndex不是由我生成的,所以我不能随便说myobj.four = newItem;myobj.newIndex = newItem不起作用,因为它使用单词“newIndex”为指标,而不是它的价值。

任何见解?

使用括号符号属性访问:

myobj[newIndex] = newItem; 

当你要定义其名称不是一个有效的标识符的属性,例如它也是有用的:

obj["1foo"] = "bar"; // `obj.1for` will cause a SyntaxError 
obj["a b"] = "bar"; // `obj.a b` will cause a SyntaxError 

注意,你可以甚至使用此属性访问器的表达式,例如:

obj[someFunc()] = "foo"; 

它会评估e括号中的表达式,它会将结果转换为字符串,因为JavaScript没有true散列表,属性名称必须是String类型。

更多信息:

+0

注意,在其上基于JavaScript标准的最新版本,它没有必要用括号符号指由关键字命名或保留的属性时词语:ECMAScript第5版允许使用'obj.for ='me''。 (一些其他的上下文,比如对象文字中的属性名称,也被放宽以允许使用关键字。)如果你想使用它,这个改变已经在Firefox中实现了几年。 – 2010-07-20 08:09:54

+0

@Jeff,是的,忘了提及它,在ES5中'IdentifierName'可以与'.'属性访问器一起使用。我会做一个更好的例子... – CMS 2010-07-20 14:31:23