在Array中调用object的属性时出错

时间:2017-08-06 07:38:33

标签: javascript typescript

在打字稿代码中,我有一个包含对象的数组。当我打电话给#34; getUsers(用户)"函数,它返回我需要的结果,但在控制台中我得到这个错误 "未捕获的TypeError:无法读取属性' firstName'未定义的     在getUsers(index.js:20)     在index.js:23"

let users = [
{
    firstName: "John",
    lastName: "Doe",
    age: 34
},
{
    firstName: "Jack",
    lastName: "Jackson",
    age: 23
},
{
    firstName: "Ann",
    lastName: "Watson",
    age: 24
}
];
function getUsers(users) {
for (var i = 0; i <= users.length; i++) {
    console.log(users[i].firstName + " is " + users[i].age + " years old!");
}
}
getUsers(users);

4 个答案:

答案 0 :(得分:2)

问题在于i <= users.length,它必须是i < users.lengthi++会将i的值递增1,但长度为3,索引从0开始,因此元素被占用直到第二个索引,因此i <= users.length实际上会尝试访问第三个索引中的元素

let users = [{
    firstName: "John",
    lastName: "Doe",
    age: 34
  },
  {
    firstName: "Jack",
    lastName: "Jackson",
    age: 23
  },
  {
    firstName: "Ann",
    lastName: "Watson",
    age: 24
  }
];

function getUsers(users) {
  for (var i = 0; i < users.length; i++) {
    console.log(users[i].firstName + " is " + users[i].age + " years old!");
  }
}
getUsers(users);

答案 1 :(得分:2)

您的for循环超出了可用的数组项。最高的ID为users.length - 1

所以最简单的方法是删除等号。

还要考虑在forEachmap函数中使用buildt:

function getUsers( users ) {
  users.forEach( u => {
    console.log( `${ u.firstName } is ${ u.age } years old!` );
  } );
}

答案 2 :(得分:1)

它应小于长度不小于等于

for (var i = 0; i < users.length; i++) {
   console.log(users[i].firstName + " is " + users[i].age + " years old!");
}

答案 3 :(得分:0)

您可以使用for-of循环

let users = [
{
    firstName: "John",
    lastName: "Doe",
    age: 34
},
{
    firstName: "Jack",
    lastName: "Jackson",
    age: 23
},
{
    firstName: "Ann",
    lastName: "Watson",
    age: 24
}
];
function getUsers(users) {
    for (var user of users) {
         console.log(user.firstName + " is " + user.age + " years old!");
    }
}

getUsers(users);