如何计算数组中特定元素的数量?

304

我有一个数组:

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

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

在JavaScript中,如何不使用for循环以最简洁的方式实现?

27个回答

2

大多数使用诸如filter之类的数组函数的解决方案都不完整,因为它们没有参数化。

这里提供一种解决方案,可以在运行时设置要计数的元素。

function elementsCount(elementToFind, total, number){
    return total += number==elementToFind;
}

var ar = [1, 2, 3, 5, 2, 8, 9, 2];
var elementToFind=2;
var result = ar.reduce(elementsCount.bind(this, elementToFind), 0);

这种方法的优点是可以轻松地更改函数,例如计算大于X的元素数量。您还可以内联声明reduce函数。
var ar = [1, 2, 3, 5, 2, 8, 9, 2];
var elementToFind=2;
var result = ar.reduce(function (elementToFind, total, number){
    return total += number==elementToFind;
}.bind(this, elementToFind), 0);

var elementToFind=2; ... function (elementToFind, total, number){ return total += number==elementToFind; }.bind(this, elementToFind) ... 这段代码难以阅读,而且与 ... (acc, x) => acc += number == 2... 相比没有任何优势。不过我喜欢你使用 += 而不是 acc + (number == 2),但感觉这种语法上的 HACK 没有必要。 - masterxilo

2

我使用这个:

function countElement(array, element) {
  let tot = 0;
  for(var el of array) {
    if(el == element) {
      tot++;
    }
  }
  return tot;
}

var arr = ["a", "b", "a", "c", "d", "a", "e", "f", "a"];

console.log(countElement(arr, "a")); // 4


2

最好将其包装成函数:

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

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

1
我认为你正在寻找的是函数式编程方法。
    const arr = ['a', 'a', 'b', 'g', 'a', 'e'];
    const count = arr.filter(elem => elem === 'a').length;
    console.log(count); // Prints 3

elem === 'a' 是条件,将其替换为您自己的条件。


它不会打印3,而是0。要修复它,你的第二行应该是count = arr.filter(elem => elem === 'a').length或者count = arr.filter(elem => {return elem === 'a'}).length - Wilfredo Pomier

1

Array.prototype.count = function (v) {
    var c = 0;
    for (let i = 0; i < this.length; i++) {
        if(this[i] === v){
            c++;
        }
    }
    return c;
}

var arr = [1, 2, 3, 5, 2, 8, 9, 2];

console.log(arr.count(2)); //3


1
你可以使用内置函数 Array.filter()

array.filter(x => x === element).length;

var arr = [1, 2, 3, 5, 2, 8, 9, 2];

// Count how many 2 there are in arr
var count = arr.filter(x => x === 2).length;

console.log(count);


1

var arrayCount = [1,2,3,2,5,6,2,8];
var co = 0;
function findElement(){
    arrayCount.find(function(value, index) {
      if(value == 2)
        co++;
    });
    console.log( 'found' + ' ' + co + ' element with value 2');
}

我会做这样的事情:

var arrayCount = [1,2,3,4,5,6,7,8];

function countarr(){
  var dd = 0;
  arrayCount.forEach( function(s){
    dd++;
  });

  console.log(dd);
}


0
在核心级别文件中为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

0

一行代码函数

const countBy = (a,f)=>a.reduce((p,v,i,x)=>p+!!f(v,i,x), 0)
countBy([1,2,3,4,5], v=>v%2===0) // 2

0

更加通用和现代的内容(在2022年):

import {pipe, count} from 'iter-ops';

const arr = [1, 2, 3, 5, 2, 8, 9, 2];

const n = pipe(arr, count(a => a === 2)).first; //=> 3

这个方法的优点:

  1. 它在不创建新数组的情况下进行计数,因此具有内存效率
  2. 它适用于任何 IterableAsyncIterable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接