美文网首页让前端飞JavaScript散文
js中获取数组中的值出现的次数

js中获取数组中的值出现的次数

作者: 绿芽 | 来源:发表于2022-04-14 14:46 被阅读0次

在日常开发中有时候会遇到获取数组中每一项值出现的次数需求,那么我们可以使用下面的几个方法。

方法一

思路

利用对象存储数组每一项的值为key,然后判断是否已经存在对象中。

步骤

1、 先创建一个空的Object
2、 然后循环目标数组的每一项
3、 将目标数组循环的项作为空对象的key,判断key对应的值是否存在
4、 不存在就添加当前项为对象的key并把值设置为1(也就是第一次出现)
5、 如果已经存在的话,则把当前的值+1即可。
代码如下

let arr1 = [1,2,2,3,3,3,'a','b','b','c','c','c'];

function getArrItemNum(arr) {
    let obj = {};
    arr.forEach(element => {
        if (obj[element]) {
            obj[element]++;
        } else {
            obj[element] = 1;
        }
    });
    return obj;
}
console.log(getArrItemNum(arr1)); // { '1': 1, '2': 2, '3': 3, a: 1, b: 2, c: 3 }

注意: 上述方法是使用对象的key来进行判断的,因为对象的key会自动转换为字符串类型,所以在判断 字符数字和 数值数字的时候会有问题。(可以采用方法二进行获取)

方法二

思路

利用es6中Map类型,它的key可以为任意数据类型,然后判断是否已经存在Map中。

步骤

1、 先创建一个空Map
2、 循环目标数组的每一项
3、 将数组循环的项作为空Map的key,获取M对应的值
4、 如果已经有值就把对应的值+1后从新赋值
5、 如果没有值就创建新的数据项,设置值为1
代码如下:

let arr1 = [1,2,2,3,3,3,'a','b','b','c','c','c', '1', '1', '2'];

function getArrItemNum(arr) {
    let mapObj = new Map();
    arr.forEach(element => {
        let num = mapObj.get(element);
        if (num) {
            mapObj.set(element, ++num); 
        } else {
            mapObj.set(element, 1); 
        }
    });
    return mapObj;
}
console.log(getArrItemNum(arr1)); //
// Map(8) {
//     1 => 1,
//     2 => 2,
//     3 => 3,
//     'a' => 1,
//     'b' => 2,
//     'c' => 3,
//     '1' => 2,
//     '2' => 1
//   }

方法三

思路

利用数组对象类型组合,每一项将数组的值为数组对象对应的key,num为出现的数量。

步骤

1、 创建一个新数组
2、 将目标数组使用sort()方法排序
3、 循环目标数组的每一项
4、 判断目标数组当前项和上一项是否相等
5、 相等的话,就把创建的数组对象最后一项的num的值+1
6、 不相等的话,就往创建的数组对象中push一个新的数据(新数据key的值是目标数组的当前项,num值为1)
代码如下:

let arr1 = [1,2,2,3,3,3,'a','b','b','c','c','c', '1', '1', '2'];

function getArrItemNum(arr) {
    let ArrObj = [];
    arr.sort();
    arr.forEach((element, index) => {
        if (element === arr[index - 1]) {
            ArrObj[ArrObj.length - 1].num++;
        } else {
            ArrObj.push({
                key: element,
                num: 1
            });
        }
    });
    return ArrObj;
}
console.log(getArrItemNum(arr1)); // 
// [
//     { key: 1, num: 1 },
//     { key: '1', num: 2 },
//     { key: 2, num: 2 },
//     { key: '2', num: 1 },
//     { key: 3, num: 3 },
//     { key: 'a', num: 1 },
//     { key: 'b', num: 2 },
//     { key: 'c', num: 3 }
// ]

如果想要获取目标数组出现次数进行排序,将上述代码稍微扩展一下即可。如:

let arr1 = [1,2,2,3,3,3,'a','b','b','c','c','c', '1', '1', '2'];

function getArrItemNum(arr) {
    let ArrObj = [];
    arr.sort();
    arr.forEach((element, index) => {
        if (element === arr[index - 1]) {
            ArrObj[ArrObj.length - 1].num++;
        } else {
            ArrObj.push({
                key: element,
                num: 1
            });
        }
    });
    return ArrObj.sort((item1, item2) =>  item2.num - item1.num);
}
console.log(getArrItemNum(arr1)); // 
// [
//     { key: 3, num: 3 },
//     { key: 'c', num: 3 },
//     { key: '1', num: 2 },
//     { key: 2, num: 2 },
//     { key: 'b', num: 2 },
//     { key: 1, num: 1 },
//     { key: '2', num: 1 },
//     { key: 'a', num: 1 }
// ]

相关文章

  • js中获取数组中的值出现的次数

    在日常开发中有时候会遇到获取数组中每一项值出现的次数需求,那么我们可以使用下面的几个方法。 方法一 思路 利用对象...

  • 数组中的值重复出现的次数

    问题描述:计算数组的值重复出现的次数 使用Map去统计,key值为数组中的值,value为值出现的次数。 输出结果...

  • 2018-01-18

    数组中每个元素出现的次数 返回的obj中的属性名是数组中的每个元素值,属性值是数组中相同的元素的个数。

  • js常用技巧一

    目录 一.JS中判断字符串中出现次数最多的字符及出现的次数 二.JS数组去重 三.类的继承 四.排序算法 一.JS...

  • 数组中数字出现的次数

    要求:一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间...

  • 数组中数字出现的次数

    题目描述 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求...

  • 数组中数字出现的次数

    题目: 题目的理解: 找单身狗的故事 ??? python实现 想看最优解法移步此处 提交 想不出好办法,用笨办法...

  • 数组中数字出现的次数

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu...

  • 数组中数字出现的次数

    题目描述 https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi...

  • 小程序 获取wxml中的id值,缓存并取值

    1、wxml文件中 绑定id值 2、js文件中 获取id值 并缓存 3、detail.js文件中 获取缓存值

网友评论

    本文标题:js中获取数组中的值出现的次数

    本文链接:https://www.haomeiwen.com/subject/wfncsrtx.html