我有一个数组:

[1, 2, 3, 5, 2, 8, 9, 2]

我想知道数组中有多少个2。

在JavaScript中,没有for循环的最优雅的方法是什么?


当前回答

现代JavaScript:

请注意,在JavaScript (JS)中进行比较时,应该始终使用三重=== =。三重等号确保JS的比较在其他语言中表现得像双等号==(有一个例外,见下文)。下面的解决方案展示了如何用函数的方式解决这个问题,这将确保你永远不会出现越界错误:

// Let has local scope
let array = [1, 2, 3, 5, 2, 8, 9, 2]

// Functional filter with an Arrow function
// Filter all elements equal to 2 and return the length (count)
array.filter(x => x === 2).length  // -> 3

JavaScript中的匿名箭头函数(lambda函数):

(x) => {
   const k = 2
   return k * x
}

对于单个输入,可以简化为这种简洁的形式:

x => 2 * x

这里隐含了返回。

在JS中总是使用三重等号:=== =进行比较,除了检查可空性:if (something == null){},因为它包括检查未定义,如果你只使用双等号,就像在这种情况下。

其他回答

最好把它包装成函数:

let countNumber = (array,specificNumber) => {
    return array.filter(n => n == specificNumber).length
}

countNumber([1,2,3,4,5],3) // returns 1

非常简单:

var count = 0;
for(var i = 0; i < array.length; ++i){
    if(array[i] == 2)
        count++;
}

2017: 如果有人仍然对这个问题感兴趣,我的解决方法如下:

const arrayToCount = [1,2,3,5,2,8,9,2]; const result = arrayToCount。Filter (i => i == 2).length; Console.log('找到的元素数量:' +结果);

Array.prototype.count =函数(v) { Var c = 0; 对于(设I = 0;I < this.length;我+ +){ If (this[i] === v){ c++; } } 返回c; } Var arr = [1,2,3,5,2,8,9,2]; console.log (arr.count (2));/ / 3

在核心级别文件中为Array类创建一个新方法,并在整个项目中使用它。

// say in app.js
Array.prototype.occurrence = function(val) {
  return this.filter(e => e === val).length;
}

在项目的任何地方使用这个-

[1, 2, 4, 5, 2, 7, 2, 9].occurrence(2);
// above line returns 3