
使用 JavaScript 获取数组中出现次数最多的元素以及次之的元素方法。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
在JavaScript中,获取数组中出现次数最多和第二多的元素是一项常见的数据处理任务,这涉及到对数组进行遍历、计数、比较等操作。这里我们介绍两种不同的方法来实现这一功能。方法一:使用哈希数组这种方法的核心是创建一个哈希数组(实际上是一个对象),用来存储数组元素及其出现的次数。遍历输入数组,对于每个元素,如果它不在哈希数组中,则设置其值为1;如果已经存在,则增加对应的计数值。遍历结束后,通过遍历哈希数组找到出现次数最多的元素及其次数,并保持第二多的元素信息。以下是这种方法的具体实现:```javascriptfunction f(arr) { var i; var length = arr.length; var hash = []; // 使用哈希数组 for (i = 0; i < length; i++) { if (!hash[arr[i]]) hash[arr[i]] = 1; // 没有初始化的数组元素为undefined,undefined++为NaN else hash[arr[i]]++; } var max = 0; // 最多的次数 var maxV; // 出现最多的元素 var second = 0; // 第二多的次数 var secondV; // 出现第二多的元素 hash.forEach(function (item, index) { // forEach函数会跳过空元素 if (item > max) { second = max; secondV = maxV; max = item; maxV = index; // 用索引来保存原数组的值 } else if (item > second) { second = item; secondV = index; } }); return { max, maxV, second, secondV };}var arr = [2, 2, 2, 2, 3, 4, 5, 4, 3, 1, 4, 4, 100, 100];var { max, maxV, second, secondV } = f(arr);console.log(max, maxV, second, secondV);```方法二:使用对象数组这种方法是将元素和其出现次数一起存储在一个对象数组中。首先初始化一个对象数组,然后遍历数组,比较当前元素与前一个元素是否相同,如果相同则增加计数,否则创建新的对象元素。根据对象数组中元素的计数值进行排序,找到出现次数最多的两个元素。以下是这种方法的实现:```javascriptfunction f(arr) { var temp = []; // 对象数组 temp[0] = { value: arr[0], index: 1 }; // 保存数组元素出现的次数和值 arr.sort(); for (var i = 1; i < arr.length; i++) { if (arr[i] == arr[i - 1]) { temp[temp.length - 1].index++; } else { temp.push({ index: 1, value: arr[i] }); } } temp.sort(function (a, b) { // 按照出现次数从大到小排列 return a.index < b.index; }) var max = temp[0].index; var maxV = temp[0].value; var second = temp[1].index; var secondV = temp[1].value; return { max, maxV, second, secondV };}var arr = [2, 2, 3, 4, 5, 100, 100, , 3, 1, 4, 4, 100, 100];var { max, maxV, second, secondV } = f(arr);console.log(max, maxV, second, secondV);```此外,为了更符合ES6的语法风格,还可以使用类(class)来封装元素的值和计数,如下所示:```javascriptfunction f(arr) { class Num { constructor(value) { this.value = value; this.index = 1; } add() { this.index++; } } arr.sort(); let temp = []; temp[0] = new Num(arr[0]); for (let i = 1; i < arr.length; i++) { if (arr[i] == arr[i - 1]) { temp[temp.length - 1].add(); } else { temp.push(new Num(arr[i])); } } temp.sort(function (a, b) { return a.index < b.index; }) let max = temp[0].index; let maxV = temp[0].value; let second = temp[1].index; let secondV = temp[1].value; return { max, maxV, second, secondV };}var arr = [2, 2, 3, 4, 5, 100, 100, , 3, 1, 4, 4, 100, 100];var { max, maxV, second, secondV } = f(arr);console.log(max, maxV, second, secondV);```以上两种方法都可以有效地解决JavaScript中获取数组出现次数最多和第二多元素的问题,适用于整型数组以及字符数组。在实际应用中,可以根据具体情况选择合适的方法。
全部评论 (0)


