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

Return value of each key in object in a for loop

本文关键字:对象 for 循环 返回      更新时间:2023-09-26

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

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

我也认为p也应该[1,6]?由于您正在使用它来引用对象中的键 m .

发生此错误是因为您有以下声明:

var p = ["1","2"];

m属性是:

m = {
    "1": [2,3],
    "6": [4,5]
}

因此,在p[1]中,程序读取m["2"]但它没有"2"属性。请改用以下代码:

var p = ["1","6"];

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