对于循环迭代 < vs <= JavaScript 基础知识



我在弄清楚为什么这个代码块给我

时遇到了麻烦

TypeError:无法读取未定义的

的属性'0'

function fromListToObject(array) {
  // make new empty object to store key:value in
  var obj = {};
  // loop over the given array
  for (var i = 0; i <= arr.length; i++){
    //every iteration keys gets stored with new key
    var keys = arr[i][0];
    // same here
    var values = arr[i][1];
    //pushing new key:value into obj
    obj[keys] = values;
  }
  return obj;
}
var arr= [['1', 'One'], ['2', 'Two'], ['3', 'Three'], ['4', 'Four'], ['5', '5']];
var result = fromListToObject(arr);
console.log(result);

我尝试了什么:当我仅使用i < arr.length运行FromlistToObject()函数内部运行for循环时,它起作用。我已经尝试寻找答案,但我可能以错误的方式问。循环不应该与" ="操作员一起使用?

如果有10个元素的数组,并且开始使用1计数 - 最后一个元素将放置在10th位置。

但是 - 如果您使用0开始计数(这是数组工作的方式),则最后一个位置将是length - 1(在此示例中为9)。

在您的示例中 - for循环以 0开头,应计算到数组中的最后一个元素,该元素放置在length - 1位置。
那个地方也是 <length(因为当我们到达=length时 - 这是"不在数组" - 您正在尝试在不存在的地方访问元素):

for (var i = 0; i < arr.length; i++) {
    ...
}

请注意,您可以做:

for (var i = 1; i <= arr.length; i++) {
    // Note that here you would want to access the elements
    // in the array using arr[i-1]
    ...
}

但这不太常见。

您拥有的另一个选项是使用数组的forEach方法:

arr.forEach(function(element) {
    ...
});

相关内容

最新更新