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.mzph.cn/news/716012.shtml

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

相关文章

链表基础知识详解(非常详细简单易懂)

概述&#xff1a; 链表作为 C 语言中一种基础的数据结构&#xff0c;在平时写程序的时候用的并不多&#xff0c;但在操作系统里面使用的非常多。不管是RTOS还是Linux等使用非常广泛&#xff0c;所以必须要搞懂链表&#xff0c;链表分为单向链表和双向链表&#xff0c;单向链表很…

【Vue3】解锁Vue3黑科技:探索接口、泛型和自定义类型的前端奇迹

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

Android Compose - PlainTooltipBox(已废弃)的替代方案

Android Compose - PlainTooltipBox 的替代方案 TooltipBox(positionProvider TooltipDefaults.rememberPlainTooltipPositionProvider(),tooltip {PlainTooltip {Text(/* tooltip content */)}},state rememberTooltipState(), ) {// tooltip anchorIconButton(onClick {…

跨站脚本攻击xss-labs(1-20)靶机练手

目录 一、跨站脚本攻击&#xff08;XSS&#xff09; 1.1 漏洞简介 1.2:类型 1.3 XSS危害 1.4XSS防御规则 二、环境搭建 三、xsst通关记录 Level 1&#xff1a;文本解析为 HTML Level 2&#xff1a;htmlspecialchars;input 标签 value 注入 定义和用法 字符过滤绕过 …

从零自制docker-1-【环境配置 docker go介绍与安装】

文章目录 docker简介举例docker安装go语言go安装go 配置 docker简介 Docker可以看作是一种极其轻巧的“虚拟机”&#xff0c;它允许你将一个或多个程序及其运行环境打包在一起&#xff0c;形成一个标准化的单元&#xff0c;这个单元可以在任何支持Docker的系统上运行&#xff…

实用!IntelliJ IDEA离线开发使用要点(一)

如果IntelliJ IDEA在本地网络之外没有HTTP访问&#xff0c;它将无法检查更新和应用补丁。在这种情况下&#xff0c;您必须下载新版本的IDE并按照离线安装中的描述手动安装它们。 IDEA v2023.3正式版下载 注意&#xff1a;没有互联网接入&#xff0c;您不能安装IntelliJ IDEA使…

SaaS 电商设计 (九) 动态化且易扩展的实现购物车底部弹层(附:一套普适的线上功能切量的发布方案)

目录 一.背景1.1 业务背景1.2 技术负债 二.技术目标三.方案设计3.1 解决移动端频繁发版3.1.1 场景分析3.1.2 技术方案 3.2 减少后端坏味道代码&无法灵活扩展问题3.2.1 通过抽象接口完成各自单独楼层渲染逻辑3.2.2 通过配置能力做到部分字段可配 四.升级上线(普适于高并发大…

2314576

☞ 通用计算机启动过程 1️⃣一个基础固件&#xff1a;BIOS 一个基础固件&#xff1a;BIOS→基本IO系统&#xff0c;它提供以下功能&#xff1a; 上电后自检功能 Power-On Self-Test&#xff0c;即POST&#xff1a;上电后&#xff0c;识别硬件配置并对其进行自检&#xff0c…

学习JAVA的第十二天(基础)

算法 算法&#xff08;Algorithm&#xff09;是指解题方案的准确而完整的描述&#xff0c;是一系列解决问题的清晰指令&#xff0c;算法代表着用系统的方法描述 解决问题的策略 机制。 查找算法 基本查找&#xff08;顺序查找&#xff09; 关键&#xff1a; 从0索引开始依次向…

学习:吴恩达:什么是神经元?神经网络如何工作?

学习-吴恩达《AI for everyone》2019 深度学习非技术解释 第2部分 可选.zh_哔哩哔哩_bilibili 深度学习Deep learning 人工神经网络Artificial Neural network 什么是神经网络&#xff1f; 只有一个神经元 4个神经元的神经网络 神经网路的绝妙之处 神经网路的绝妙之处就在…

ctf_show笔记篇(web入门---信息收集)

目录 信息收集 1-2&#xff1a;查看源代码 3&#xff1a;bp抓包 4&#xff1a;robots.txt&#xff08;这个文件里会写有网站管理者不想让爬虫的页面或其他&#xff09; 5&#xff1a;网站源代码泄露index.phps 6&#xff1a;同样也是源码泄露&#xff0c;&#xff08;拿到…

Java快读

java的快读 (1)BufferedReader BufferedReader br new BufferedReader(new InputStreamReader(System.in));//定义对象String[] strings br.readLine().split(" ");//读取一行字符串&#xff0c;以空格为分隔转化为字符串数组int n Integer.parseInt(strings[0])…

k8s分布式图床(k8s,metricsapi,vue3+ts)

image-manage 图像管理应用 图像管理应用提供了一个方便管理图片的平台&#xff0c;支持单机和Kubernetes集群部署。请确保您至少拥有一个MySQL数据库和一个Redis数据库&#xff0c;以及一个至少为Kubernetes 1.29版本的集群&#xff08;如果选择集群部署&#xff09;。 文档…

PCL1.14.0安装、使用教程

写在前面 本文内容 本文是PCL1.14.0在Windows下的安装、使用教程&#xff1b; PCL、Open3D其他版本的编译和使用相关教程见 各个版本的Open3D、PCL的编译、使用教程平台/环境 windows11(windows10): visual studio 2022&#xff1b;cmake 3.22; VsCode转载请注明出处&#xff…

http和https的区别是什么?

–前言 传输信息安全性不同、连接方式不同、端口不同、证书申请方式不同 一、传输信息安全性不同 1、http协议&#xff1a;是超文本传输协议&#xff0c;信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#xff0c;就可以直接读懂其中的信息。 2、h…

关于django makemigrations/migrate在生成数据表上遇到的一些问题

当你删除了生成的 migration 文件夹&#xff0c;将数据库从 SQLite 切换到 MySQL&#xff0c;并且在执行 makemigrations 命令时显示没有变化&#xff0c;同时 MySQL 中没有生成表&#xff0c;可能是由于以下原因造成的&#xff1a; Django迁移系统的工作方式&#xff1a;Djang…

排序(3)——直接选择排序

目录 直接选择排序 基本思想 整体思路&#xff08;升序&#xff09; 单趟 多趟 代码实现 特性总结 直接选择排序 基本思想 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的…

软考 系统分析师系列知识点之详细调查(3)

接前一篇文章&#xff1a;软考 系统分析师系列知识点之详细调查&#xff08;2&#xff09; 所属章节&#xff1a; 第10章. 系统分析 第2节. 详细调查 在系统规划阶段&#xff0c;通过初步调查&#xff0c;系统分析师已经对企业的组织结构、系统功能等有了大致的了解。但是&…

力扣203移除链表元素

题目&#xff1a; 203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 1&#xff0c;设置一个头节点&#xff0c;统一操作。 2&#xff0c;这里是用p查找&#xff0c;但是…

BUUCTF---数据包中的线索1

1.题目描述 2.下载附件&#xff0c;是一个.pcap文件 3.放在wireshark中&#xff0c;仔细观察数据流&#xff0c;会发现有个叫fenxi.php的数据流 4.这条数据流是http,且使用GET方式&#xff0c;接下来我们使用http.request,methodGET 命令来过滤数据流 5.在分析栏中我们追踪htt…