#javascript #arrays #for-loop #javascript-objects
#javascript #массивы #для цикла #javascript-объекты
Вопрос:
Это код, который я написал. Я хочу listContacts
, чтобы функция перебирала contacts
массив и регистрировала имя и фамилию каждого контакта на консоли. Когда я запускаю это, он регистрирует только John Doe на консоли. Чего мне здесь не хватает?
var contacts = [
{
firstName : 'John',
lastName : 'Doe',
phone : '(512) 355-0453',
email : 'johndoe@email.com'
},
{
firstName : 'Jane',
lastName : 'Doe',
phone : '(313) 641-2203',
email : 'janedoe@email.com'
},
{
firstName : 'Suzie',
lastName : 'Smith',
phone : '(415) 604-4219',
email : 'suziesmith@email.com'
}
];
var listContacts = function () {
for (var i = 0; i <= contacts.length; i ) {
return contacts[i].firstName ' ' contacts[i].lastName;
}
};
console.log(listContacts());
Комментарии:
1. Вы не должны
return
делать это на первой итерации вашего цикла, так как таким образом вы никогда не получите никаких других итераций этого цикла.2. К вашему сведению, ваше условие должно быть
i < contacts.length
, а не<=
.3.
for (let c of contacts) console.log( c.firstName ' ' c.lastName );
4.
console.log(contacts.reduce( (p,e) => { return p e.firstName ' ' e.lastName "n" }, "") );
Ответ №1:
Ваше return
утверждение в вашем for
цикле приводит к остановке этого цикла после первой итерации. Вместо этого вы должны войти в цикл:
var listContacts = function () {
for (var i = 0; i < contacts.length; i ) {
console.log(contacts[i].firstName ' ' contacts[i].lastName);
}
}
listContacts();
Комментарии:
1. Я вижу. Большое вам спасибо за ваш быстрый ответ!
Ответ №2:
Ваша return
конструкция внутри цикла приведет к немедленному завершению вашей функции, поэтому ваш цикл никогда не будет повторяться более одного раза. Поэтому вы можете увидеть только первую запись. Вместо этого соберите имена в массиве и верните это:
var listContacts = function () {
var result = [];
for (var i = 0; i < contacts.length; i ) {
result.push(contacts[i].firstName ' ' contacts[i].lastName);
}
return resu<
}
// Turn the array to string by joining with a newline character:
console.log(listContacts().join('n'));
Более компактный способ сделать это — использовать этот код ES6:
var listContacts = function () {
return contacts.map(c => c.firstName ' ' c.lastName);
}
// Turn the array to string by joining with a newline character:
console.log(listContacts().join('n'));
Комментарии:
1. Я новичок в этом, если вы не заметили 😉 Спасибо за четкое объяснение!
Ответ №3:
Вы возвращаетесь в свой цикл for, и когда цикл for выполняется, он видит оператор return и завершает работу функции без выполнения оставшихся элементов массива.
Вот что вы могли бы сделать:
var contacts = [{
firstName: 'John',
lastName: 'Doe',
phone: '(512) 355-0453',
email: 'johndoe@email.com'
}, {
firstName: 'Jane',
lastName: 'Doe',
phone: '(313) 641-2203',
email: 'janedoe@email.com'
}, {
firstName: 'Suzie',
lastName: 'Smith',
phone: '(415) 604-4219',
email: 'suziesmith@email.com'
}];
var listContacts = function() {
return contacts.map(function(contact) {
return contact.firstName " " contact.lastName
})
};
console.log(listContacts());