2016-05-21 5 views
2

Я хотел бы знать, если есть родной Javascript код, который делает то же самое, как это:Подсчитайте, сколько раз такое же значение отображается в яваскрипта массиве

function f(array,value){ 
    var n = 0; 
    for(i = 0; i < array.length; i++){ 
     if(array[i] == value){n++} 
    } 
    return n; 
} 
+3

В мое честное мнение, что для цикла, который у вас есть, намного чище, чем использование 'reduce'. Для этого нет единого встроенного метода, тем ближе вы можете использовать встроенные методы, которые будут зацикливать массив для вас. – SeinopSys

+0

Функция и цикл, которые вы предоставили, делают то, что вы хотите. По какой причине вы ищете другой метод? Это по соображениям производительности? У вас есть большой массив и вы хотите избежать прохождения всего массива? Знание того, что ваша проблема помогает с ответом. –

+0

@SaeedD., Для подсчета необходимо проверить каждый элемент. –

ответ

2

Для этой цели могут быть разные подходы.
И ваш подход с петлей 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 
    
3

Вы можете использовать уменьшить, чтобы попасть :

Working example

var a = [1,2,3,1,2,3,4]; 

var map = a.reduce(function(obj, b) { 
    obj[b] = ++obj[b] || 1; 
    return obj; 
}, {}); 
+1

Мой голос идет к этому, так как я думаю, что это именно тот фундаментальный ответ на все вопросы, начиная с «дайте мне решение найти количество раз каждый ... bla bla. – Redu

0

Вы можете использовать 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; 
} 
Смежные вопросы