Как мне выполнить цикл по массиву с несколькими объектами и перечислить определенные элементы только на Javascript?

#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());