Вы можете сделать это с помощью .filter()
довольно легко, например, так:
Идея состоит в том, что вы хотите отфильтровать только те объекты, которые соответствуют, а затем использовать .length, чтобы получить счетчик вконец.Мы можем узнать, совпадает ли элемент, проверив, включено ли значение свойства объекта key
в список ключей, которые вы ищете.
var test = [
{ key: '1' },
{ key: '3' },
{ key: '2' },
{ key: '7' },
{ key: '5' },
{ key: '8' },
]
var keysToSearch = ['1', '2', '3', '4', '5', '6', '7'];
function counter (objs, searchKeys) {
return objs.filter(obj => searchKeys.includes(obj.key)).length;
}
console.log(counter(test, keysToSearch));
РЕДАКТИРОВАТЬ
Вот решение, которое делает то же самое, что и выше, но не создает новый массив с .filter()
.
var test = [
{ key: '1' },
{ key: '3' },
{ key: '2' },
{ key: '7' },
{ key: '5' },
{ key: '8' },
]
var keysToSearch = ['1', '2', '3', '4', '5', '6', '7'];
function counter (objs, searchKeys) {
var count = 0;
for (var obj of objs) {
if (searchKeys.includes(obj.key)) { count++; }
}
return count;
}
console.log(counter(test, keysToSearch));