计算对象数组中特定属性值的出现次数(ANGULAR 2+)

时间:2017-08-07 12:58:02

标签: javascript arrays

我想知道如何计算像这样的对象数组中出现的次数:

[
{id : 12,
 name : toto,
},
{id : 12,
 name : toto,
},
{id : 42,
 name : tutu,
},
{id : 12,
 name : toto,
},
]

在这种情况下,我想有一个功能谁给我这个:

getNbOccur(id){
//don't know...//

return occurs;
}

如果我给id 12我想要3。

我该怎么做?

2 个答案:

答案 0 :(得分:11)

一个简单的ES6解决方案是使用filter来获取具有匹配id的元素,然后获取已过滤数组的长度:



var array = [{
        id: 12,
        name: 'toto',
    },
    {
        id: 12,
        name: 'toto',
    },
    {
        id: 42,
        name: 'tutu',
    },
    {
        id: 12,
        name: 'toto',
    },
];

var id = 12;
var count = array.filter((obj) => obj.id === id).length;

console.log(count);




编辑:另一种更高效的解决方案(因为它不会生成新列表)是@YosvelQuintero建议使用的reduce



var array = [{
        id: 12,
        name: 'toto',
    },
    {
        id: 12,
        name: 'toto',
    },
    {
        id: 42,
        name: 'tutu',
    },
    {
        id: 12,
        name: 'toto',
    },
];

var id = 12;
var count = array.reduce((acc, cur) => cur.id === id ? ++acc : acc, 0);

console.log(count);




答案 1 :(得分:1)

你算了

var arr = [
  {id: 12, name: 'toto'},
  {id: 12, name: 'toto'},
  {id: 42, name: 'tutu'},
  {id: 12, name: 'toto'}
]

function getNbOccur(id, arr) {
  var occurs = 0;
  
  for (var i=0; i<arr.length; i++) {
    if ( 'id' in arr[i] && arr[i].id === id ) occurs++;
  }

  return occurs;
}

console.log( getNbOccur(12, arr) )