由于我是一个初学者,所以我正在练习一些练习,而我偶然遇到了这个我无法解决的问题,有人愿意帮我吗?
我想创建一个函数,该函数返回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));
答案 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);