JavaScript函数-计算对象数组中某个值的出现次数

JavaScript函数-计算对象数组中某个值的出现次数,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我被赋予了一项任务,我肯定错过了什么。提供的代码不是原始问题,而是类似的问题。我必须计算阵列中有多少人年龄在16岁或以上。我一直在玩弄它,但我无法解决它。拜托,有人能解释一下我做错了什么吗 在任务中,我得到一个对象数组: var people = [{name:'Emma', age:15},{name:'Matt', age: 16}, {name:'Janet', age:17}] 我需要完成一个函数来计算16岁或以上的人数。函数的开头已给出(即函数更正(人){//Complete}) “

我被赋予了一项任务,我肯定错过了什么。提供的代码不是原始问题,而是类似的问题。我必须计算阵列中有多少人年龄在16岁或以上。我一直在玩弄它,但我无法解决它。拜托,有人能解释一下我做错了什么吗

在任务中,我得到一个对象数组:

var people = [{name:'Emma', age:15},{name:'Matt', age: 16}, {name:'Janet', age:17}]
我需要完成一个函数来计算16岁或以上的人数。函数的开头已给出(即
函数更正(人){//Complete}

“示例代码”是我一直在使用的一些基本代码。“不正确的尝试”是指我的尝试,这是我不断返回的代码,或者是它的变体也是正确的

请帮忙

错误尝试:

var-people=[
{姓名:“艾玛”,年龄:15},
{姓名:“马特”,年龄:16},
{姓名:“汤姆”,年龄:17}
];
函数校正(数组){
//完成此函数可返回16岁的人数+
var计数=0;
for(设i=0;i=16){
计数++;
}
}
返回计数;
}
}

控制台日志(更正(人员))您需要使用索引获取对象

obj = array[i];
然后可以直接获取属性,而不必循环所有属性

if (obj.age >= 16) {
    count++;
}

您可以将这两个部分放在一个检查中,而无需使用另一个变量
obj

if (array[i].age >= 16) {
    count++;
}
.age
是对象的一个属性

{
    name: 'Emma',
    age: 15       // <--
}

您需要使用索引获取对象

obj = array[i];
然后可以直接获取属性,而不必循环所有属性

if (obj.age >= 16) {
    count++;
}

您可以将这两个部分放在一个检查中,而无需使用另一个变量
obj

if (array[i].age >= 16) {
    count++;
}
.age
是对象的一个属性

{
    name: 'Emma',
    age: 15       // <--
}

使用数组的
filter
方法会简单得多:

function correctAge(people = [], age = 16){

    return people.filter( person => person.age > age ).length
}

使用数组的
filter
方法会简单得多:

function correctAge(people = [], age = 16){

    return people.filter( person => person.age > age ).length
}
将以上代码行添加到函数中


将上述代码行添加到函数中。

迭代数组,检查元素匹配参数的属性,并递增计数器

下面的代码示例中,名称和属性已更改以保护无辜者

const cars=[
{制造:'日产',国家:'日本'},
{制造:'福特',国家:'美国'},
{制造:'雪佛兰',国家:'美国'},
{制造:'沃尔沃',国家:'瑞典'},
{制造:'三菱',国家:'日本'},
];
来自国家/地区(汽车、国家/地区)的功能{
让计数=0;
for(设i=0;i汽车。减少((计数,汽车)=>{
car.country===国家和计数++;
返回计数;
}, 0);
console.log(来自国家(汽车,'日本');//2.
console.log(来自国家(汽车,'瑞典');//1.
console.log(来自国家/地区(汽车,'美国');//2.
console.log(来自国家(汽车、加拿大));//0
console.log(来自Country2(汽车,“日本”);//2.
console.log(来自Country2(汽车,“瑞典”);//1.
console.log(来自Country2(汽车,'USA'));//2.

console.log(来自Country2(汽车,“加拿大”);//0
迭代数组,检查元素匹配参数的属性并递增计数器

下面的代码示例中,名称和属性已更改以保护无辜者

const cars=[
{制造:'日产',国家:'日本'},
{制造:'福特',国家:'美国'},
{制造:'雪佛兰',国家:'美国'},
{制造:'沃尔沃',国家:'瑞典'},
{制造:'三菱',国家:'日本'},
];
来自国家/地区(汽车、国家/地区)的功能{
让计数=0;
for(设i=0;i汽车。减少((计数,汽车)=>{
car.country===国家和计数++;
返回计数;
}, 0);
console.log(来自国家(汽车,'日本');//2.
console.log(来自国家(汽车,'瑞典');//1.
console.log(来自国家/地区(汽车,'美国');//2.
console.log(来自国家(汽车、加拿大));//0
console.log(来自Country2(汽车,“日本”);//2.
console.log(来自Country2(汽车,“瑞典”);//1.
console.log(来自Country2(汽车,'USA'));//2.

console.log(来自Country2(汽车,“加拿大”);//0
试试这个,你会得到你的结果

var people=[{姓名:'Emma',年龄:15},{姓名:'Matt',年龄:16},{姓名:'Janet',年龄:17}];
常数校正=函数(年龄){
返回people.filter(x=>x.age控制台日志(更正(16))试试这个,你会得到你的结果

var people=[{姓名:'Emma',年龄:15},{姓名:'Matt',年龄:16},{姓名:'Janet',年龄:17}];
常数校正=函数(年龄){
返回people.filter(x=>x.age是一个优雅的解决方案-

function correctAge(array) {
  return array.reduce((total, person) => {
      return person.age >= 16 ? ++total : total;
    }, 0)
}
对于问题中的示例,这将返回值2。

是一个优雅的解决方案-

function correctAge(array) {
  return array.reduce((total, person) => {
      return person.age >= 16 ? ++total : total;
    }, 0)
}

对于问题中的示例,这将返回值2。

这里的大多数答案都集中在or的使用上(我认为这是最合适的方法)。但是,我想指出如何修改您的“错误尝试”,使其真正起作用。以下是我采取的纠正措施:

  • 移除道具循环。您只关心此处的
    age
    属性,因此无需检查其他道具。(
    obj[prop]
    实际上是向后的。它应该是
    obj[prop]
  • 移动
    返回计数外部<代码>用于
    循环。
  • array.length[i]
    替换为
    array[i]
    数组属性是整数,而不是数组或对象
  • var-people=[
    {姓名:“艾玛”,年龄:15},
    {姓名:“马特”,年龄:16},
    {姓名:“汤姆”,年龄:17}
    ];
    功能校正(人){
    //完成函数返回多少人