JavaScript 计算数组中每个元素的出现次数

要计算数组中每个元素的出现次数:

  1. 创建一个对象,将每个数组元素存储为键,并将其出现次数存储为值。
  2. 使用 for...of 循环遍历数组。
  3. 在每次迭代中,如果特定元素存在于对象中,则增加其计数,如果不存在,则将元素的计数设置为 1
const arr = ['a', 'b', 'a', 'a', 'c', 'c'];

const count = {};

for (const element of arr) {
  if (count[element]) {
    count[element] += 1;
  } else {
    count[element] = 1;
  }
}

console.log(count); // {a: 3, b: 1, c: 2}

我们首先声明一个变量并将其设置为一个空对象。

for...of 循环允许我们遍历数组。

我们的 if 条件检查我们是否已经遇到特定的数组元素并在对象上初始化它。

如果这是我们第一次遇到数组元素,我们将元素设置为对象的键并将其值初始化为 1

如果我们再次遇到相同的元素,我们会增加对象中相应键的值。

最终结果是一个对象,其键是数组元素和值 - 它们在数组中的出现。

如果我们的数组由数字组成,这种方法也适用。

const arr = [1, 1, 1, 2, 3, 3];

const count = {};

for (const element of arr) {
  if (count[element]) {
    count[element] += 1;
  } else {
    count[element] = 1;
  }
}

console.log(count); // {1: 3, 2: 1, 3: 2}

这似乎有点令人困惑,因为对象键只能是 JavaScript 中的字符串或符号类型。

但是,我们仍然可以通过任何一种方式访问对象的键。

console.log(count[1]); //  3
console.log(count['1']); //  3

如果我们尝试使用数字访问对象的键,它将自动转换为字符串。

Internet Explorer 不支持 for...of 循环。 如果必须支持浏览器,需要改用基本的 for 循环。

const arr = ['a', 'b', 'a', 'a', 'c', 'c'];

const count = {};

for (let index = 0; index < arr.length; index++) {
  const element = arr[index];

  if (count[element]) {
    count[element] += 1;
  } else {
    count[element] = 1;
  }
}

console.log(count); // {a: 3, b: 1, c: 2}

此代码片段实现了相同的目标,但是我们使用基本的 for 循环,而不是 for...of 循环。

它有点杂乱,并且看起来并不直接,但是大多数开发人员习惯于阅读 for 循环,如果我们必须支持 Internet Explorer,它就可以完成工作。

查看笔记

扫码一下
查看教程更方便