你的声明 m = { "1": ["2", "3"], "6", ["4", "5"] };
给我带来了语法错误。我假设你的意思是m = { "1": ["2", "3"], "6": ["4", "5"] };
。
p.length
是 2,所以你有 2 次循环迭代。在您的表达式的第一次迭代值是:
i = 0
p[i] = "1"
m[p[i]] = m["1"] = ["2", "3"]
在第二个循环中:
i = 1
p[i] = "2"
m[p[i]] = m["2"] (undefined)
你只有m["1"]
和m["6"]
,没有m["2"]
。这就是为什么array
在最后一次迭代中未定义。所以在循环之后它仍然是未定义的。
您可以更正m
声明如下:
m = { "1": ["2", "3"], "2": ["4", "5"] };
现在你会array = ["4", "5"]
在循环之后。
我可以建议您不要将整数存储在字符串中。使用2
而不是"2"
. 否则将来可能会导致错误。例如,2 + 2 = 4
和"2" + "2" = "22"
。如果您有"2"
其他代码,请使用parseInt
将其转换为普通数字。
此外,您不必p
使用键列表创建变量。您可以简单地使用for..in
循环来遍历对象的键:
m = { 1: [2, 3], 2: [4, 5] };
for(i in m) {
var array = m[i];
//do stuff
}
请记住,这for..in
并不能保证保留键的顺序。但是,所有现有的实现for..in
都保留了顺序。