【问题标题】:For Loop Error using an array of objects使用对象数组的 For 循环错误
【发布时间】:2017-08-03 18:09:35
【问题描述】:

我正在创建一个简单的程序,该程序将打印我的学生对象数组的名字和姓氏。当我运行程序时,它会正确打印所有名称,但还会指出出现以下错误:

TypeError: 无法读取未定义的属性“first_name”

这是我的代码:

var students = [ 
     {first_name:  'Michael', last_name : 'Jordan'},
     {first_name: 'John', last_name : 'Rosales'},
     {first_name: 'Mark', last_name : 'Guillen'},
     {first_name: 'KB', last_name : 'Tonel'}
]

for (var i = 0; i <= 4; i++) {
    console.log(students[i].first_name + " " + students[i].last_name);
};

我的 for 循环中是否有我没有看到的错误?

【问题讨论】:

  • 是的,如果从零开始,则数组中的最后一项是三。当你在循环中达到四个时,你有undefined,因为你的数组中没有那么多项目。
  • 你只有四个对象,你的终止条件应该是i&lt;4里面的for循环
  • 你有一个对象数组,所以你也可以使用 forEach()
  • 永远不要使用静态长度来迭代数组。始终参考 array.length
  • @Jonasw 100% 同意因为我们永远不知道数组的长度是否会改变。

标签: javascript arrays object for-loop


【解决方案1】:

您的 for 循环从 index(0-4) 开始迭代 5 次。你只有4个名字。所以它试图读取第 5 个元素并找到一个未定义的元素。

将你的 for 循环更改为:

for (var i = 0; i <= 3; i++) {
    console.log(students[i].first_name + " " + students[i].last_name);
};

【讨论】:

  • i &lt;= 3 没有问题,但i &lt; students.length 会是更好的答案。如果students数组的元素个数发生变化怎么办?
【解决方案2】:

使用 i

【讨论】:

    【解决方案3】:

    永远记住数组总是从 0 开始它的索引,所以在你的情况下,它会像 i=0 一样开始,因为你已经调节了循环直到 i

    结束循环到 i=3

    for (var i = 0; i <= 3; i++) {
    console.log(students[i].first_name + " " + students[i].last_name);};
    

    或者从 i=1 开始循环到 i=4

    for (var i = 1; i <= 4; i++) {
        console.log(students[i].first_name + " " + students[i].last_name);
    };
    

    唯一重要的是 for 循环的迭代次数,它不应超过数组的长度。

    【讨论】:

    • 遍历数组时,最好是用户array.length,因为数组长度不能随时间变化,所以没有静态数字
    【解决方案4】:

    当你想遍历一个数组时,你也可以像这样使用 forEach:

    students.forEach(function(student){
        console.log(student.first_name + " " + student.last_name);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-09
      • 2022-08-11
      • 1970-01-01
      • 2012-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多