JS:统计数组中每种元素出现的次数

本文探讨了三种不同的方法,通过JavaScript实现统计字符串中字符出现的次数,包括使用对象存储、数组去重遍历以及利用`split`和`reduce`函数。通过实例展示了如何利用`charAt`、`forEach`、`indexOf`和`push`等API进行操作,并对比了每种方法的优劣。
摘要由CSDN通过智能技术生成

方法一:

        1. 使用对象来统计次数,数组元素作为键名,出现的次数作为键值

        2. 首先对数组进行去重,写到一个新数组中

        3. 新旧数组元素进行比较,如果元素相同,就让对象的该元素属性值+1

相关函数:

  • charAt()——根据字符索引号获得该位置的字符
  • forEach()——数组遍历
  • indexOf()——根据数组元素获取该元素的索引号
  • push()——在数组的最后面添加一个元素,括号内为要添加进去的元素
<script>
    //准备统计字符出现的次数
    var str = 'abfeacmwwxzyyydsmafe'; 
    var arr = [];

    //将字符串转换为数组
    for(var i = 0; i < str.length; i++){
        arr.push(str.charAt(i));
    }

    //进行数组遍历去重
    var newarr = [];
    var obj = {};
    arr.forEach(function(item){
        if(newarr.indexOf(item) == -1){
            //将遍历去重以后的新数组放到newarr中
            //newarr的作用主要是给对象做键值
            newarr.push(item);
            //去重以后的字符作为对象的属性,每个字符出现的次数作为属性值
            //属性值先初始化为0
            obj[item] = 0;
        
        }
    })

    //循环遍历写入每个字符出现的次数,更新属性值
    newarr.forEach(function(item){
        arr.forEach(function(item1){
            //去重前和去重后的数组每个元素之间进行比较
            //如果相等就让对象中这个字符的属性值+1
            if(item == item1){
                obj[item]++;   
            }
        })
    })
    console.log(obj)
</script>

方法二:

  1. 依然是使用对象来保存
  2. 使用forEach进行数组遍历
var str = "ABFEacMWwXZyYYDSmaFe";
var newstr = str.toLowerCase();
var arr = [];

//将字符串转换为数组
for (var i = 0; i < newstr.length; i++) {
    arr.push(newstr.charAt(i));
}

//使用forEach和对象字面量直接写入
var obj = {}
arr.forEach(function(item){
    obj[item] = obj[item] ? obj[item]+1 : 1
})
console.log(obj);

方法三:刷算法题刷到一个蛮有意思的答案,记录一下

        相关函数:split,reduce

var str = "ABFEacMWwXZyYYDSmaFe";
var newstr = str.toLowerCase();

let result = newstr.split('').reduce((temp,data)=>{
    temp[data]=temp[data]?temp[data] + 1: 1;
    return temp;
},{}) // reduce的第二个参数是传递给函数的初始值

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值