Подсчитать вхождение значения среди нескольких ассоциативных массивов в JavaScript - PullRequest
0 голосов
/ 29 апреля 2018

Какой самый оптимальный способ подсчета появления значения среди многих ассоциативных массивов. Например, у нас есть

var array1 = {
  firstname: 'john',
  lastname: 'bob'
};
var array2 = {
  firstname: 'sara',
 lastname: 'johnson'
};
var array 3 = {
  firstname: 'john',
  lastname: 'paul'
};

как бы я в этом случае посчитал, сколько раз "джон" встречается как имя? (возвращаемое значение должно быть 2)

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Для подсчета используйте функцию reduce, вам не нужно создавать дополнительные массивы (используя функцию filter) для этого.

var array1 = {firstname: 'john',lastname: 'bob'},
    array2 = {firstname: 'sara',lastname: 'johnson'},
    array3 = {firstname: 'john',lastname: 'paul'},
    count = [array1, array2, array3].reduce((a, c) => (a + (Object.keys(c).findIndex(k => k === 'firstname' && c[k] === 'john') > -1)), 0);
    
console.log(count);
0 голосов
/ 29 апреля 2018

Поместите их в один больший массив, filter это по имени john, а затем проверьте его длину:

const array1 = {
  firstname: 'john',
  lastname: 'bob'
};
const array2 = {
  firstname: 'sara',
  lastname: 'johnson'
};
const array3 = {
  firstname: 'john',
  lastname: 'paul'
};
const input = [array1, array2, array3];
const johnCount = input.filter(({ firstname }) => firstname === 'john').length;
console.log(johnCount);
...