我有一个对象和一个数组:
m = { "1": ["2", "3"], "6": ["4", "5"] };
var p = ["1", "6"];
我有一个for循环:
for (var i = 0; i < p.length; i++) {
// Return an array that is the value of a key in m, for each key specified in p
var array = m[p[i]];
// do stuff with array
}
上述任何原因无效?在for循环运行后,数组仍为undefined
。
答案 0 :(得分:2)
另外我认为p
也应该是[1,6]
?由于您使用它来引用对象m
中的键。
答案 1 :(得分:1)
发生错误是因为您有此声明:
var p = ["1","2"];
但是m
属性是:
m = {
"1": [2,3],
"6": [4,5]
}
因此,p[1]
会使您的程序读取m["2"]
,但它没有“2”属性。
请改用此代码:
var p = ["1","6"];
答案 2 :(得分:0)
您对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
的所有现有实现都会保留顺序。