📅  最后修改于: 2023-12-03 15:11:16.914000             🧑  作者: Mango
在处理数组元素时,有时我们需要知道某一元素在数组中出现的次数,或者希望找到一定范围内出现次数在某一阈值以上的元素。这时我们可以使用以下 Javascript 程序来查询数组元素的频率范围。
function getElementCountInRange(arr, minFreq, maxFreq) {
let freqMap = new Map();
for (let i = 0; i < arr.length; i++) {
freqMap.set(arr[i], (freqMap.get(arr[i]) || 0) + 1);
}
let res = [];
freqMap.forEach((value, key) => {
if (value >= minFreq && value <= maxFreq) {
res.push(key);
}
});
return res;
}
该程序使用了 ES6 中的 Map 数据结构,通过遍历数组元素将每个元素以及其频率保存在 Map 中。在遍历完成后,我们遍历整个 Map,将频率在 minFreq 和 maxFreq 之间的元素加入一个结果数组中并返回。在这里我们使用了 ES6 的箭头函数语法和 let 关键字来声明局部变量和循环变量。以下是详细解释:
elemntCountInRange(arr, minFreq, maxFreq)
: 函数接收三个参数,分别为要处理的数组,最小频率和最大频率。let freqMap = new Map()
: 创建一个空 Map 对象,用来保存每个元素以及其出现次数。freqMap.set(arr[i], (freqMap.get(arr[i]) || 0) + 1)
: 遍历数组元素,对于每个元素,如果 Map 中已经存在该元素,则将其出现次数加 1;否则,将其出现次数初始化为 1。let res = []
: 创建一个空数组,用来保存频率在 minFreq 和 maxFreq 之间的元素。freqMap.forEach((value, key) => { ... })
: 遍历 Map 中的所有键值对,对于每一个键值对,函数会执行大括号中的代码。if (value >= minFreq && value <= maxFreq) { res.push(key) }
: 如果该元素的出现次数在 minFreq 和 maxFreq 之间,则将其加入结果数组中。return res
: 返回结果数组。以下是使用该程序查询数组元素频率范围的示例:
let arr = [1, 2, 3, 1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 1];
let res = getElementCountInRange(arr, 2, 4);
console.log(res); // [1, 2, 3, 4]
在上面的示例中,我们查询 arr 中出现次数在 2 到 4 次之间的元素,结果为 [1, 2, 3, 4]。