Подсчитайте количество раз, когда одно и то же значение появляется в массиве javascript
Я хотел бы знать, есть ли собственный JavaScript-код, который делает то же самое, что и это:
function f(array,value){
var n = 0;
for(i = 0; i < array.length; i++){
if(array[i] == value){n++}
}
return n;
}
Ответы
Ответ 1
Для этой цели могут быть разные подходы.
И ваш подход с циклом for
очевидно, не является неуместным (за исключением того, что он выглядит избыточно по количеству кода).
Вот несколько дополнительных подходов к получению появления определенного значения в массиве:
-
Использование метода Array.forEach
:
var arr = [2, 3, 1, 3, 4, 5, 3, 1];
function getOccurrence(array, value) {
var count = 0;
array.forEach((v) => (v === value && count++));
return count;
}
console.log(getOccurrence(arr, 1)); // 2
console.log(getOccurrence(arr, 3)); // 3
-
Использование метода Array.filter
:
function getOccurrence(array, value) {
return array.filter((v) => (v === value)).length;
}
console.log(getOccurrence(arr, 1)); // 2
console.log(getOccurrence(arr, 3)); // 3
Ответ 2
Вы можете использовать сокращение, чтобы добраться туда:
Рабочий пример
var a = [1,2,3,1,2,3,4];
var map = a.reduce(function(obj, b) {
obj[b] = ++obj[b] || 1;
return obj;
}, {});
Ответ 3
Вы можете использовать indexOf()
для поиска и подсчета каждого value
в array
function g(array,value){
var n = -1;
var i = -1;
do {
n++;
i = array.indexOf(value, i+1);
} while (i >= 0 );
return n;
}
Ответ 4
Вы также можете использовать forEach
let countObj = {};
let arr = [1,2,3,1,2,3,4];
let countFunc = keys => {
countObj[keys] = ++countObj[keys] || 1;
}
arr.forEach(countFunc);
// {1: 2, 2: 2, 3: 2, 4: 1}