我想创建一个从数组返回多个对象的函数,但它只从索引[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/