JavaScript

JS - как узнать, сколько раз переменная содержится в массиве?

Есть массив a.
a = [1,2,1,3,1,4,1,5]
Как узнать, сколько раз 1 содержится в a?
Вариант с filter:

a = [1,2,1,3,1,4,1,5];
b = a.filter(x => x == 1).length;
alert(b);

В одну строчку:

alert([1,2,1,3,1,4,1,5].filter(x => x == 1).length);

Вариант с reduce:

b = a.reduce((x, y) => x + (y == 1), 0);

Обычным циклом:

b = 0;
for(x of a) { b += x == 1; }
alert(b);
Александр Суббота
Александр Суббота
58 801
Лучший ответ
a = [1,2,1,3,1,4,1,5];
b = a.filter(function (n) {
if (n==1) {return n};
})
alert(b.length);
_____
Либо по старинке через цикл
a = [1,2,1,3,1,4,1,5];
b = 0;
for (var i = 0; i < a.length; i++) {
if (a[i]==1) {b += 1};
};
alert(b);
Александр Суббота А если надо найти кол-во нулей? Твой вариант с filter вернёт 0 для любого массива.
Вот так например

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

a.reduce((a,b)=>(a[b]=a[b]?a[b]+1:1,a),{});//{1: 4, 2: 1, 3: 1, 4: 1, 5: 1}

если надо нам знать конкретно какая именно тогда пишем так

a.reduce((a,b)=>(a[b]=a[b]?a[b]+1:1,a),{})[5];//1

a.reduce((a,b)=>(a[b]=a[b]?a[b]+1:1,a),{})[1];//4

С каких пор числовой литерал стал переменной? Наркоманы чертовы.
Алгоритмически, единственный способ - это перебор всех элементов массива (и подсчет кол-ва подходящих по условию). Методы класса Array реализуют перебор вместе со вспомогательной логикой, и выполняют вызовы, поэтому относительно медленные. Быстрейший способ - императивный, через цикл с if или тернарником. Это хорошо для больших массивов. А для мелких, скорость не критерий - поэтому, с ними обычно делается функционально, через стандартный reduce. Остальными методами решать данную задачу == говнокодить, так как остальные подразумевают создание промежуточного массива (делать это при такой простой задаче как подсчет - попросту неэффективно, а значит глупо).
В общем, let count = a.reduce((r, d) => r += (d === 1), 0);
alert([ 1,2,1,3,1,4,1,5 ].toString().match( /(1)/g ).length );