JavaScript 统计数组项的频率
在本文中,我们将统计JavaScript数组中数组项的频率。
在使用数组时,有时候我们需要统计数组项的频率。JavaScript提供了一些方法来统计数组中某个项的出现次数,下面我们将对其中的一些方法进行解释:
- 使用for循环
- 使用filter()方法
- 使用reduce()方法
- 使用for-of循环
方法1: 使用for循环
JavaScript的for循环用于迭代数组的元素,并且用于计算数组中元素的出现次数。
语法:
for (statement 1 ; statement 2 ; statement 3){
// code here...
}
示例: 在这个示例中,for循环遍历元素数组,并在控制台打印出所有元素的出现次数。
JavaScript
let arr = [1, 2, 3, 2, 3, 4, 5,
5, 6, 1, 1, 4, 5, 7, 8, 8];
const count = {};
for (let i = 0; i < arr.length; i++) {
let ele = arr[i];
if (count[ele]) {
count[ele] += 1;
} else {
count[ele] = 1;
}
}
console.log(count);
时间复杂度: O(n)。
空间复杂度: O(n),因为创建了一个 count 数组。
输出:
{ '1': 3, '2': 2, '3': 2, '4': 2,
'5': 3, '6': 1, '7': 1, '8': 2 }
方法2: 使用filter()方法
JavaScript的Array filter()方法用于从给定数组中创建一个新数组,该新数组只包含满足参数方法设定的条件的元素。
语法:
array.filter(callback(element, index, arr), thisValue)
示例: 在本示例中,使用filter()方法来计算数组元素的频率。我们在控制台中打印出数组中“1”的频率。
JavaScript
let arr = [1, 2, 3, 2, 3, 4, 5,
5, 6, 1, 1, 4, 5, 7, 8, 8];
function count(arr, element) {
return arr.filter(
(ele) => ele == element).length;
};
console.log(count(arr, 1))
输出:
3
方法3:使用reduce()方法:
Javascript中的 arr.reduce() 方法用于将数组缩减为一个值,并对数组的每个值(从左到右)执行提供的函数,将函数的返回值存储在累加器中。
语法:
array.reduce( function(total, currentValue,
currentIndex, arr), initialValue )
示例:
在这个示例中,使用reduce()方法来计算数组元素的频率。我们在控制台中打印出数组中“1”的频率。
Javascript
const arr = [1, 2, 3, 2, 3, 4, 5,
5, 6, 1, 1, 4, 5, 7, 8, 8];
function count(arr, element) {
return arr.reduce((ele, arrayEle) =>
(arrayEle == element ? ele + 1 : ele), 0);
};
console.log(count(arr, 1));
输出:
3
方法4: 使用for-of循环 :
for…of循环遍历可迭代对象(如数组,映射,集合,参数对象等),使用自定义迭代钩子调用语句来执行每个不同属性的值。
语法:
for ( variable of iterableObjectName) {
...
}
示例: 在这个例子中,for循环遍历元素数组并在控制台上打印出所有元素的出现次数。
Javascript
const arr = [1, 2, 3, 2, 3, 4, 5,
5, 6, 1, 1, 4, 5, 7, 8, 8];
const count = {};
for (let ele of arr) {
if (count[ele]) {
count[ele] += 1;
} else {
count[ele] = 1;
}
}
console.log(count);
输出:
{ '1': 3, '2': 2, '3': 2, '4': 2, '5': 3, '6': 1, '7': 1, '8': 2 }