js优雅的统计字符串字符出现次数

题目如下 统计一串字符串中每个字符出现的频率
示例字符串

let str = 'asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd'

小白写法

let str = 'asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd'let result = {};
for (let i = 0; i < str.length; i++) {if (result[str[i]]) {result[str[i]]++;}else {result[str[i]] = 1;}
}
console.log(result);

在这里插入图片描述

但是这种写法明显丑陋不堪,代码量太多了,一点也不像卷狗写的代码
我们可以试着改进一下,使用数组的foreach

let str = 'asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd'let result = {};
str.split('').forEach(function (item) {if (result[item]) {result[item]++} else {result[item] = 1}
});
console.log(result);

在这里插入图片描述
如上,虽然这样也能写出来发,但是这种代码都看能得懂,一点也不酷,作为卷狗,就是得写的别人看不懂

let str = 'asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd'let result = {};
// 使用reduce统计字符串中每个字符出现的次数
str.split('').reduce((pre, cur) => {if (pre[cur]) {pre[cur]++;} else {pre[cur] = 1;}return pre;
}, result);
console.log(result);

在这里插入图片描述
如上,reduce这个用的人比较少,应该能让一部分看不懂但是还是有风险
所以再加上es6的语法保险一些

let str = 'asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd'let result = {};
str.split('').reduce((pre, cur) =>(pre[cur]++ || (pre[cur] = 1), pre), result);
console.log(result);

在这里插入图片描述
不对不对,我都用es6写法了,我还整啥对象?我用map啊,哇,还是一行了耶,性能更好了,看起来更酷了呢

let str = 'asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd'let result = str.split('').reduce((pre, cur) =>pre.set(cur, (pre.get(cur) || 0) + 1), new Map())
console.log(result)

没别的意思,只是想卷死在座的各位,或者被在坐的各位卷死,有没有比我还要卷的
在这里插入图片描述

耗时5.133ms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/97012.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

仓库运行状况如何得知?数据挖掘是关键!

库存、订单、出入库记录、物流信息、货物状态等数据&#xff0c;是仓库管理的重要组成部分。 仓库数据的重要性 做好仓库数据管理对企业的重要性不言而喻。通过有效地管理数据&#xff0c;企业可以更好地了解市场需求和库存情况&#xff0c;快速响应市场变化&#xff0c;提高库…

第 361 场 LeetCode 周赛题解

A 统计对称整数的数目 枚举 x x x class Solution { public:int countSymmetricIntegers(int low, int high) {int res 0;for (int i low; i < high; i) {string s to_string(i);if (s.size() & 1)continue;int s1 0, s2 0;for (int k 0; k < s.size(); k)if …

openGauss学习笔记-59 openGauss 数据库管理-相关概念介绍

文章目录 openGauss学习笔记-59 openGauss 数据库管理-相关概念介绍59.1 数据库59.2 表空间59.3 模式59.4 用户和角色59.5 事务管理 openGauss学习笔记-59 openGauss 数据库管理-相关概念介绍 59.1 数据库 数据库用于管理各类数据对象&#xff0c;与其他数据库隔离。创建数据…

OPENCV实现计算描述子

1、计算描述子 kp,des = sift.computer(img,kp) 2、其作用是进行特征匹配 3、同时计算关键点和描述 3.1、kp,des = sift.detectAnd Computer(img,...)

Spark-Core核心算子

文章目录 一、数据源获取1、从集合中获取2、从外部存储系统创建3、从其它RDD中创建4、分区规则—load数据时 二、转换算子(Transformation)1、Value类型1.1 map()_1.2 mapPartitions()1.3 mapPartitionsWithIndex(不常用)1.4 filterMap()_扁平化&#xff08;合并流&#xff09;…

Vue框架--Vue中的事件

1.事件处理 事件的基本使用: (1).使用v-on:xxx 或 @xxx 绑定事件,其中xxx是事件名; (2).事件的回调需要配置在methods对象中,最终会在vm上; (3).methods中配置的函数,不要用箭头函数!否则this就不是vm了; (4).methods中配置的函数,都是被Vue所管理的函数,this的…

javaweb入门版学生信息管理系统-增删改查+JSP+Jstl+El

dao public class StudentDao {QueryRunner queryRunner QueryRunnerUtils.getQueryRunner();//查询全部学生信息public List<Student> selectStudent(){String sql "select * from tb_student";List<Student> students null;try {students queryRunn…

江苏移动基于OceanBase稳步创新推进核心数据库分布式升级

*本文首发自《中国电信业》 数字经济时代&#xff0c;数据库作为企业核心数据存储、处理、挖潜等方面的关键载体&#xff0c;重要性日益凸显。对于运营商而言&#xff0c;数据库具有行业用户数量多、访问数量多、业务复杂度高、数据安全性高、响应要求性高以及需要 7*24 小时服…

Android基础之Activity生命周期

Activity是Android四大组件之一、称为之首也恰如其分。 Activity直接翻译为中文叫活动。在Android系统中Activity就是我看到的一个完整的界面。 界面中看到的TextView(文字&#xff09;、Button(按钮)、ImageView&#xff08;图片&#xff09;都是需要Activity来承载的。 总…

肖sir __linux__面试题和考核05

面试题 1、查看linux中第11行到第20行的数据&#xff08;比如文档a 有30行&#xff09; 方法1&#xff1a;tail -n 11 mm |head -n10 n 表示从第10行开始&#xff0c;取前10行 方法2&#xff1a;head -n -10 mm| tail -n 10 表示从末尾第10行开始&#xff0c;最后10行 方法3&am…

联合教育部高等学校科学研究发展中心,阿依瓦科技创新教育专项正式发布!

7 月 24 日&#xff0c;教育部科技发展中心官网发布了《中国高校产学研创新基金&#xff0d;阿依瓦科技创新教育专项申请指南》。 针对高校在人工智能、智能制造、智慧校园、大数据等领域科研和教研的创新研究&#xff0c;教育部高等学校科学研究发展中心与阿依瓦(北京)技术有…

如何实现自定义数据库账号密码加解密

背景 在实际的项目开发中我们有时候基于安全考虑需要在项目配置文件中对数据库账号密码做加密处理&#xff0c;这个时候我们就可以使用jasypt这个组件来实现。如果有些项目安全等级要求比较高&#xff0c;可能加密的算法需要自定义或者使用SM4国密算法来实现加解密&#xff0c…