javascript - 为什么这个 javascript 函数不从 for 循环返回多个对象?

标签 javascript function object

我想创建一个从数组返回多个对象的函数,但它只从索引[1]返回一个对象。这个for循环有错误吗?我尝试将 return 放在循环内,它也只返回一个对象。

function Me(arr) {
  var person = {}
  var year = new Date().getFullYear()
  for (var i = 0; i < arr.length; i++) {
    console.log(i + 1 + ". " + arr[i][0] + " " + arr[i][1] + " :")
    person["firstName"] = arr[i][0]
    person["lastName"] = arr[i][1]
    person["gender"] = arr[i][2]
    person["age"] = arr[i][3]
    if (arr[i][3] === undefined) {
      person.age = "Invalid Birth Year"
    } else {
      person.age = year
    }
  }
  return person;
}

console.log(Me([
  ['Christ', 'Evans', 'Male', 1982],
  ['Robert', 'Downey', 'Male']
]));
// 1. Christ Evans:
// { firstName: 'Christ',
//   lastName: 'Evans',
//   gender: 'Male',
//   age: 37 }
// 2. Robert Downey:
// { firstName: 'Robert',
//   lastName: 'Downey',
//   gender: 'Male',
//   age: 'Invalid Birth Year' }
console.log(Me([]));

最佳答案

为了回答你的问题,为什么你只得到一个对象,让我们看看你的代码:

function Me(arr) {
  var person = {}
  // for-loop removed
  return person;
}

您只返回一个对象。它将包含循环最后一次迭代的数据。

for 循环的另一件事:

for (var i = 0; i < arr.length; i++) {
  person["firstName"] = arr[i][0]
  person["lastName"] = arr[i][1]
  // more code removed
}

您可以像这样执行 for 循环,但还有更好的方法。 注意每次访问对象时如何使用 arr[i] 吗?这是非常低效的。使代码更具可读性的一种方法是获取循环顶部的值:let item = arr[i];但还有更好的方法来迭代数组。有“forEach”,但在这种情况下map“更好,因为看起来您想要将数组中的值映射到一个新数组,其中一个对象包含第一个数组中的数据。

我正在使用Array.prototype.map迭代数组。

"use strict";
function Me(arr) {
  let currentYear = new Date().getFullYear();
  return arr.map( item => ({
    firstName : item[0],
    lastName : item[1],
    gender: item[2],
    age : item[3] === undefined ? "Invalid Birth Year" : currentYear - item[3]
  }) )
}

console.log(Me([['Christ', 'Evans', 'Male', 1982], ['Robert', 'Downey', 'Male']]));

如果你不允许使用map,但必须使用for循环,你可以这样做:

"use strict";
function Me(arr) {
  var output = []; // starts with an empty array
  var currentYear = new Date().getFullYear();
  
  for ( var i = 0; i < arr.length; i+=1 ) {
    var item = arr[i];
    output.push({
      firstName : item[0],
      lastName : item[1],
      gender: item[2],
      age : item[3] === undefined ? "Invalid Birth Year" : currentYear - item[3]
    })
  }
  
  return output;
}

console.log(Me([['Christ', 'Evans', 'Male', 1982], ['Robert', 'Downey', 'Male']]));

关于javascript - 为什么这个 javascript 函数不从 for 循环返回多个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58041295/

相关文章:

c++ - 使用构造函数 Vs 动态初始化对象。 C++ 中的新功能?

php - 事件记录 : Working with a db object

javascript - 在javascript中调用ajax函数

javascript - 跳过按钮 - 如何用另一个功能停止一个功能

swift - UITextField + 计时器问题 - 检查 "Editing Changed"但只有一次启动计时器?

Python 3.x 函数值不正确

json - 如何通过 API 将映射函数与 JSON 对象获取结合使用

javascript - 如何通过单击浏览器的后退按钮来限制用户不转到上一页

javascript - 将值从 Angular JS 传递给 JavaScript 函数

javascript - 在图标上悬停绘制图标