Чтобы ответить на ваш вопрос, почему вы получаете только один объект, давайте посмотрим на ваш код:
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 , but in this case
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']]));
Если вам не разрешено использовать карту, но вы должны использовать цикл 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']]));