for循环中对象中每个键的返回值

时间:2012-06-16 03:04:59

标签: javascript arrays object key-value

我有一个对象和一个数组:

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

3 个答案:

答案 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的所有现有实现都会保留顺序。