JS实现:统计字符出现频率/计算文字在文本中的出现次数

要实现这个功能,JavaScript 一个非常强大的方法,那就是reduce()

reduce() 它用于将数组的所有元素减少到一个单一的值。这个值可以是任何类型,包括但不限于数字、字符串、对象或数组。

reduce() 方法接收一个回调函数作为参数,这个函数通常称为“reducer”。

reducer 必须至少接受两个参数:一个累加器(accumulator)和当前元素(current value)。累加器是用来存储中间结果的变量,而当前元素则是数组中的当前项。

reduce() 的基本语法如下:

array.reduce(function(accumulator, currentValue, currentIndex, array) {// 实现累加器和当前值之间的操作return accumulator;
}, initialValue);
  • accumulator:累积结果的值,也是每次迭代后返回的值。
  • currentValue:当前正在处理的数组元素。
  • currentIndex:当前元素的索引位置(可选参数)。
  • array:调用 reduce 方法的数组(可选参数)。
  • initialValue:提供给累加器的初始值(可选参数)。

示例:

假设我们有一个数字数组,我们想计算所有数字的总和:

const numbers = [1, 2, 3, 4, 5];const sum = numbers.reduce(function(accumulator, currentValue) {return accumulator + currentValue;
}, 0);console.log(sum); // 输出 15

reduce() 方法从初始值 0 开始,并将数组中的每个元素添加到累加器中。


如果想统计一个字符串中每个字符的出现次数,可以使用 reduce() 方法:

const str = "hello world";
const charCount = [...str].reduce((accumulator, char) => {if (accumulator[char]) {accumulator[char]++;} else {accumulator[char] = 1;}return accumulator;
}, {});console.log(charCount);
// 输出: { h: 1, e: 1, l: 3, o: 2, ' ': 1, w: 1, r: 1, d: 1 }

在这个例子中,我们首先将字符串转换成字符数组,然后使用 reduce() 方法遍历每个字符并统计其出现次数。

reduce() 方法非常灵活,可以用于各种复杂的操作,如数据聚合、数据转换和数据过滤等。


配和 HTML 实现自定义的统计频率:

HTML

  <div><div data-role="form-group"><label for="inputText">请输入文本:</label><input type="text" id="inputText" /></div><div data-role="form-group"><label for="charToCount">请输入需要统计的字符:</label><input type="text" id="charToCount" /></div><div id="result">文字的数量为:</div><br /><button id="compute" οnclick="countCharFrequency()">开始计算</button></div>

JS

function countCharFrequency() {const inputText = document.getElementById("inputText").value;const charToCount = document.getElementById("charToCount").value;const result = [...inputText].reduce((acc, char) => {if (char === charToCount) {acc[char] = (acc[char] || 0) + 1;}return acc;}, {});const frequency = result[charToCount] || 0;const resultHtml = document.getElementById("result")resultHtml.innerText = `文字 ${charToCount} 的数量为:${frequency}`;
}

完整代码:

加上 CSS 样式,让页面精美一点

在这里插入图片描述

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>用reduce统计字符出现频率</title><style>body {font-family: Arial, sans-serif;max-width: 800px;margin: 0 auto;padding: 20px;background-color: #f5f5f5;}label {display: block;margin-bottom: 5px;color: #333;}input[type="text"] {width: 100%;padding: 10px;border: 1px solid #ccc;border-radius: 5px;box-sizing: border-box;}div[data-role="form-group"] {margin-bottom: 15px;}button {background-color: #007bff;color: white;width: 100%;padding: 10px 20px;border: none;border-radius: 5px;cursor: pointer;transition: background-color 0.3s;}button:hover {background-color: #bfcfe1;color: #000;}#result {font-weight: bold;margin-top: 20px;}</style></head><body><div><div data-role="form-group"><label for="inputText">请输入文本:</label><input type="text" id="inputText" /></div><div data-role="form-group"><label for="charToCount">请输入需要统计的字符:</label><input type="text" id="charToCount" /></div><div id="result">文字的数量为:</div><br /><button id="compute" onclick="countCharFrequency()">开始计算</button></div><script>function countCharFrequency() {const inputText = document.getElementById("inputText").value;const charToCount = document.getElementById("charToCount").value;const result = [...inputText].reduce((acc, char) => {if (char === charToCount) {acc[char] = (acc[char] || 0) + 1;}return acc;}, {});const frequency = result[charToCount] || 0;const resultHtml = document.getElementById("result");resultHtml.innerText = `文字 ${charToCount} 的数量为:${frequency}`;}</script></body>
</html>

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

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

相关文章

win10 docker-compose搭建ELK日志收集

elk的威名大家都知道&#xff0c;以前前司有专门的人维护&#xff0c;现在换了环境&#xff0c;实在不想上服务器看&#xff0c;所以就摸索下自己搭建&#xff0c;由于现场服务器是需要类似向日葵那样连接&#xff0c;我还是把日志弄回来&#xff0c;自己本地filebeat上传到es中…

ESP32和ESP8266的WIFI的136个问题与答案

ESP32和ESP8266的WIFI的136个问题与答案 ESP32和ESP8266 WIFI相关问题与答案&#xff0c;具有一定的参考价值。ESP32-S3模块 1. ESP32 和 ESP8266 是否支持中文 SSID&#xff1f; ESP32 和 ESP8266 均支持中文 SSID&#xff0c;但需要使用相应的库和设置。需要注意的是&#…

自定义函数---随机数系列函数

大家有没有发现平常在写随机数的时候&#xff0c;需要引入很多的头文件&#xff0c;然后还需要用一些复杂的函数&#xff0c;大家可能不太习惯&#xff0c;于是我就制作了一个头文件 // random_number.h #ifndef RANDOM_NUMBER_H // 预处理指令&#xff0c;防止头文件被重复包含…

六款领先的电脑监控软件系统(哪些电脑软件可以监控电脑)

在当今信息时代&#xff0c;企业对数据安全和员工生产力的关注度越来越高。电脑监控软件系统成为企业管理的重要工具&#xff0c;帮助企业确保信息安全、提高工作效率。本文将介绍几款领先的电脑监控软件系统&#xff0c;以便企业选择最适合的解决方案。固信电脑监控软件 可免费…

如何在SQLServer中更改端口

在SQL Server中更改端口通常涉及SQL Server配置管理器的使用&#xff0c;以下是一个详细的步骤指南&#xff1a; 一、打开SQL Server配置管理器 通过开始菜单&#xff1a;点击“开始”菜单&#xff0c;搜索“SQL Server配置管理器”并打开它。通过运行窗口&#xff1a;按Win …

log4j2的日志框架(详细,springboot和异步日志的实现)

目录 log4j2的介绍 Log4j2的性能 SpringBoot中的使用Log4j2 log4j2的进阶--异步日志 AsyncAppender方式 AsyncLogger方式 log4j2的介绍 Apache Log4j 2是对Log4j的升级版&#xff0c;参考了logback的一些优秀的设计&#xff0c;并且修复了一些问题&#xff0c;因此带 来…

Go-知识测试-测试参数

Go-知识测试-测试参数 1. -args2. -json3. -o4. -bench5. -benchtime6. -cpu7. -count8. -failfast9. -list10. -parallel11. -run12. -timeout13. -v14 -benchmem 1. -args 指示go test 把-args 后面的参数带到测试中去。具体的测试函数会根据此参数来控制测试流程。 -args后…

主机安全-进程、命令攻击与检测

目录 概述反弹shell原理nc/dev/xxx反弹shell下载不落地反弹Shell各种语言反弹shell linux提权sudosuid提权mysql提权 Dnslog参考 概述 本文更新通过在主机&#xff08;不含容器&#xff09;上直接执行命令或启动进程来攻击的场景。检测方面以字节跳动的开源HIDS elkeid举例。每…

磁感应强度检测模块使用教程

目录 一、磁感应强度检测模块(AT 协议版本、Modbus 协议版本)1、参数2、报警引脚 二、AT版本1、接线说明2、AT 指令 三、Modbus 版本1、接线说明2、Modbus 指令格式3、Modbus 指令 一、磁感应强度检测模块(AT 协议版本、Modbus 协议版本) 图1 正面 图2 背面 AT 协议版本和 Modb…

Letter Exchange

这道题目看官方题解就好了&#xff0c;这个转换图论挺显然的 证明一下为什么最后一定是 显然练完贬值后图只能长成这个样子 在消掉长度为\(2\)的环后&#xff0c;如果说图没边了&#xff0c; 那么显然就不用交换了&#xff0c;否则的话我们任取一条边 那么对于\(2\)号点来说&am…

韦东山嵌入式linux系列-驱动进化之路:总线设备驱动模型

1 驱动编写的 3 种方法 以 LED 驱动为例 1.1 传统写法 使用哪个引脚&#xff0c;怎么操作引脚&#xff0c;都写死在代码中。 最简单&#xff0c;不考虑扩展性&#xff0c;可以快速实现功能。 修改引脚时&#xff0c;需要重新编译。 应用程序调用open等函数最简单的方法是驱动…

(深度估计学习)Depth Anything V2 复现

Depth Anything V2 复现 一、配置环境二、准备数据1. 权重文件2. 训练数据 三、Test四、Train 代码&#xff1a;https://github.com/DepthAnything/Depth-Anything-V2 一、配置环境 在本机电脑win跑之后依旧爆显存&#xff0c;放到服务器跑&#xff1a;Ubuntu22.04&#xff0c…

使用Zabbix进行服务监控:构建高效稳定的IT服务管理平台

使用Zabbix进行服务监控&#xff1a;构建高效稳定的IT服务管理平台 在当今的数字化时代&#xff0c;IT服务管理&#xff08;ITSM&#xff09;对于确保企业IT系统的稳定性和性能至关重要。服务监控是ITSM的重要组成部分&#xff0c;可以帮助企业实时了解IT系统的运行状况&#…

微调Qwen2大语言模型加入领域知识

目录 试用Qwen2做推理安装LLaMA-Factory使用自有数据集微调Qwen2验证微调效果 试用Qwen2做推理 参考&#xff1a;https://qwen.readthedocs.io/en/latest/getting_started/quickstart.html from transformers import AutoModelForCausalLM, AutoTokenizer device "cuda…

极速构建的艺术:Kylin中Cube的并行构建实践

极速构建的艺术&#xff1a;Kylin中Cube的并行构建实践 引言 Apache Kylin是一款开源的分布式分析引擎&#xff0c;专为处理大规模数据集的即时查询而设计。Kylin通过构建数据立方体&#xff08;Cube&#xff09;来优化查询性能。随着数据量的不断增长&#xff0c;Cube的构建…

9.6 栅格图层符号化唯一值着色渲染

文章目录 前言多波段彩色渲染唯一值着色QGis设置为唯一值着色二次开发代码实现唯一值着色 总结 前言 介绍栅格图层数据渲染之唯一值着色渲染说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 多波段彩色渲染唯一值着色 以“with_color_table.tif”数据为例…

硅谷甄选4(项目主体)

1.路由配置 1.1路由组件的雏形 src\views\home\index.vue&#xff08;以home组件为例&#xff09; 安装插件&#xff1a; 1.2路由配置 1.2.1路由index文件 src\router\index.ts //通过vue-router插件实现模板路由配置 import { createRouter, createWebHashHistory } fro…

B站学习Java路线

Java 基础 【零基础 快速学Java】韩顺平 零基础30天学会Java JVM 尚硅谷宋红康JVM全套教程&#xff08;详解java虚拟机&#xff09; Java 并发 JUC

react-router实现路由拦截,useLocation,useNavigate钩子

路由拦截 react-router中没有直接给出拦截路由的方法&#xff0c;需要手动的去监听路由的变化来拦截路由 路由拦截的要点&#xff1a; 能够识别出目标路由和原始路由&#xff08;区分跳转前和跳转后&#xff09;能够在跳转时&#xff08;跳转前或者跳转后&#xff09;执行一些…

Python redis获取的结果是字节不是字符串

Python redis获取的结果是字节不是字符串 pool redis.ConnectionPool(hostlocalhost,port6379, passwordREDIS_PWD, decode_responsesTrue)需要指明给结果解码decode_responsesTrue才能返回字符串