Я хотел бы знать, как я могу подсчитать количество вхождений в массиве объектов, подобных этому:
[
{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.
Как я могу это сделать?
Простое решение ES6 использует filter
чтобы получить элементы с совпадающим идентификатором, а затем получить длину фильтрованного массива:
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);
Изменить: другое решение, более эффективное (поскольку оно не генерирует новый список), является использование reduce
как предлагается @YosvelQuintero:
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);
Вы считаете
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) )