Как получить кол-во вхождений значения в массив

183
31 октября 2018, 18:40

Этот алгоритм считает кол-во вхождений элемента в массиве

var numbers = [2, 4, 4, 7, 6, 8, 4];
function howMany(array, value) {
    var n = 0;
    for (var i = 0; i < array.length; i++)
        if (array[i] == value)
            n++;
    return n;
}
console.log(howMany(numbers, 3)); // -> 0
console.log(howMany(numbers, 4)); // -> 3
console.log(howMany(numbers, 5)); // -> 0
console.log(howMany(numbers, 6)); // -> 0

Должен ведь быть соответствующий метод для массива?

Answer 1

Можно прикрутить замыкание, чтобы сохранить результаты первого прохода по массиву и переиспользовать их.

function howMany(arr) { 
  const map = arr.reduce((c, item) => (c[item]=(c[item]||0) + 1, c), {}); 
   
  return num => map[num]; 
} 
 
const data = [1, 5, 4, 3, 4, 6, 4, 7, 1]; 
 
console.log(howMany(data)(4)); // 3 
 
const howManyInData = howMany(data); 
console.log(howManyInData(1), howManyInData(4)); // 2 3

Answer 2

const numbers = [2, 4, 4, 7, 6, 8, 4]; 
 
Array.prototype.howMany = function(value) { 
    return this.reduce((prev, curr) => { 
      return curr === value ? prev+1 : prev 
    }, 0); 
} 
 
console.log(numbers.howMany(3)); 
console.log(numbers.howMany(4)); 
console.log(numbers.howMany(5)); 
console.log(numbers.howMany(6));

Answer 3

ответ free_ze в комментариях решил рпоблему

array.filter(x => x === value).length
READ ALSO
Не работает Web Worker в проекте на React JS

Не работает Web Worker в проекте на React JS

Создаю Web Worker по классикеВ основном скрипте:

196
Почему браузер игнорирует анимацию?

Почему браузер игнорирует анимацию?

сейчас я разбираюсь с анимационными эффектами с помощью css и javascript и хочу реализовать алгоритм похожий на VueJs чтобы лучше понимать как это...

164
Подскажите легкий скрипт аудиоплеера

Подскажите легкий скрипт аудиоплеера

Подскажите скрипт аудиоплеера, который можно было бы использовать с минимальными изменениями в разметке - например, задать соответствующие...

158