比较对象数组中的属性值

时间:2019-07-10 06:12:05

标签: javascript object

由于我是一个初学者,所以我正在练习一些练习,而我偶然遇到了这个我无法解决的问题,有人愿意帮我吗?

我想创建一个函数,该函数返回18岁或18岁以上的人数,这是我一直在尝试的方法,但我有些困惑。

const examplePeople = [
  { name: 'John', age: 15 },
  { name: 'Jane', age: 16 },
  { name: 'Jack', age: 25 },
  { name: 'Ana', age: 18 },
  { name: 'Raul', age: 23 },
  { name: 'Pedro', age: 17 }
];

function countLegalPeople(people) {
  for (i= 0; i >= people["age"] ; i++){
    if (people[i]["age"] >= 18) {
      return people[i];
    }
  }
}

console.log(countLegalPeople(examplePeople));

4 个答案:

答案 0 :(得分:2)

我将使用reduce,其中累加器是到目前为止找到的通过测试的对象数:

const examplePeople = [
  { name: 'John', age: 15 },
  { name: 'Jane', age: 16 },
  { name: 'Jack', age: 25 },
  { name: 'Ana', age: 18 },
  { name: 'Raul', age: 23 },
  { name: 'Pedro', age: 17 }
];

const result = examplePeople.reduce((a, { age }) => a + (age >= 18), 0);
console.log(result);

使用for循环,您必须增加一个更持久的变量,例如

const examplePeople = [
  { name: 'John', age: 15 },
  { name: 'Jane', age: 16 },
  { name: 'Jack', age: 25 },
  { name: 'Ana', age: 18 },
  { name: 'Raul', age: 23 },
  { name: 'Pedro', age: 17 }
];

let result = 0;
for (let i = 0; i < examplePeople.length; i++) {
  if (examplePeople[i].age >= 18) {
    result++;
  }
}
console.log(result);

但是,数组方法通常更简洁明了。

答案 1 :(得分:2)

为什么不尝试Array.prototype.filter()

const examplePeople = [
  { name: 'John', age: 15 },
  { name: 'Jane', age: 16 },
  { name: 'Jack', age: 25 },
  { name: 'Ana', age: 18 },
  { name: 'Raul', age: 23 },
  { name: 'Pedro', age: 17 }
];

function countLegalPeople(people) {
  return people.filter(p => p.age >= 18).length;
}

console.log(countLegalPeople(examplePeople));

答案 2 :(得分:0)

您的方法存在的问题是您将返回for循环内。每当您返回时,您的函数都会停止运行(它实际上会跳出您的函数),因此,每当遇到18岁以上的人时,您都将停止循环,因此无法再计算更多人了。

相反,您可以创建一个变量并将其设置为零。这将计算您已经看到18岁的人数。为此,每次看到18岁或以上的人时,您都需要在此变量中添加一个。然后,一旦您的for循环完成,您就可以返回该数字。

请参见以下示例:

const examplePeople = [
  { name: 'John', age: 15 },
  { name: 'Jane', age: 16 },
  { name: 'Jack', age: 25 },
  { name: 'Ana', age: 18 },
  { name: 'Raul', age: 23 },
  { name: 'Pedro', age: 17 }
];

function countLegalPeople(people) {
  let counter = 0; // number of people >= 18;
  for (let i= 0; i < people.length; i++){ // loop through the array of people (using people.length)
    if (people[i]["age"] >= 18) {
        counter++; // age 1 to counter (same as counter = counter + 1)
    }
  }
  return counter; // return the amount of people >= 18
}

console.log(countLegalPeople(examplePeople));

答案 3 :(得分:0)

您的问题有点令人困惑,可以采用两种不同的方式,因此,如果您希望返回新数组中18岁以上的总人数,您将执行以下操作:

const examplePeople = [
  { name: 'John', age: 15 },
  { name: 'Jane', age: 16 },
  { name: 'Jack', age: 25 },
  { name: 'Ana', age: 18 },
  { name: 'Raul', age: 23 },
  { name: 'Pedro', age: 17 }
];

let adults = [];
for (let i = 0; i < examplePeople.length; i++) {
  if (examplePeople[i].age >= 18) {
    adults.push(examplePeople[i]);
  }
}
console.log(adults);

您还可以通过以下简单方法获得长度:

console.log(adults.length);