У меня проблемы с написанием цикла for ... in на основе условия в JavaScript [новичок] - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь изменить функцию, чтобы она возвращала счетчик людей в возрасте 16 лет и старше. Я знаю, что мне нужно для ... в цикле. Это примерно, насколько я получил. Пожалуйста помоги.

function countLegalDrivers(people){

}

const examplePeopleArray = [
  { name: 'John', age: 15},
  { name: 'Jane', age: 16},
  { name: 'Jack', age: 17}
];

console.log(countLegalDrivers(examplePeopleArray), '<-- should be 2');

Ответы [ 3 ]

0 голосов
/ 10 октября 2019
  function countLegalDrivers(people){
  return people.reduce((prev,cur)=>prev+(cur.age>=16?1:0),0);
}

const examplePeopleArray = [
  { name: 'John', age: 15},
  { name: 'Jane', age: 16},
  { name: 'Jack', age: 17}
];

console.log(countLegalDrivers(examplePeopleArray), '<-- should be 2');

Функция Array.prototype.reduce легко решает вашу проблему.

0 голосов
/ 12 октября 2019

Как указывает synchrodynamic , это звучит как домашнее задание, поэтому я не буду публиковать полный ответ здесь. Тем не менее, я думаю, что будет справедливо сказать вам, что это неправильный инструмент для работы. for...in используется для перебора пар ключей и значений в объекте, и согласно документации MDN , не следует использовать для перебора элементов в массиве (что у тебя здесь). Вместо этого достаточно простого цикла for (или, альтернативно, одного из методов итерации, упомянутых в других комментариях).

0 голосов
/ 10 октября 2019

Вы можете сделать с фильтром или без фильтра

// with filter 
 function countLegalDrivers(people) {
   return people.filter(p => p.age >= 16).length;
 }

// with ordinary for loop
/* function countLegalDrivers(people) {
  var count = 0;
  for(var i=0;i<people.length;i++){
    if(people[i].age>=16){
      count++;
    }
  }
  return count;
}
*/

const examplePeopleArray = [
  { name: "John", age: 15 },
  { name: "Jane", age: 16 },
  { name: "Jack", age: 17 }
];

console.log(countLegalDrivers(examplePeopleArray));
...