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

news2024/9/25 11:14:53

要实现这个功能,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.coloradmin.cn/o/1924084.html

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

相关文章

【C++】设计一套基于C++与C#的视频播放软件

在开发一款集视频播放与丰富交互功能于一体的软件时&#xff0c;结合C的高性能与C#在界面开发上的便捷性&#xff0c;是一个高效且实用的选择。以下&#xff0c;我们将概述这样一个系统的架构设计、关键技术点以及各功能模块的详细实现思路。 一、系统架构设计 1. 架构概览 …

截图神器Snipaste

这是我作为测试这么些年来用过的最好用的截图工具&#xff0c;让你将截图贴回到屏幕上&#xff0c;最好用的截图工具&#xff0c;推荐给同事深受好评。 snipaste是一个简单但强大的截图工具&#xff0c;也可以让你将截图贴回到屏幕上。下载打开Snipaste,按下F2来开始截图&…

【已解决】sudo: apt: command not found 或者apt-get: command not found解决方案

一、问题 在CentOS7.5运行apt-get install supervisor遇到如下报错 二、原因 CentOS的软件安装工具不是apt-get &#xff0c;而是yum&#xff0c;应该使用如下命令&#xff1a; yum install supervisor 后面命令换为yum就可以了 三、扩展&#xff1a; 一般来说linux系统…

MVC架构

MVC架构 MVC架构在软件开发中通常指的是一种设计模式&#xff0c;它将应用程序分为三个主要组成部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。这种分层结构有助于组织代码&#xff0c;使…

AR0132AT 1/3 英寸 CMOS 数字图像传感器可提供百万像素 HDR 图像处理(器件编号包含:AR0132AT6R、AR0132AT6C)

AR0132AT 1/3 英寸 CMOS 数字图像传感器&#xff0c;带 1280H x 960V 有效像素阵列。它能在线性或高动态模式下捕捉图像&#xff0c;且带有卷帘快门读取。它包含了多种复杂的摄像功能&#xff0c;如自动曝光控制、开窗&#xff0c;以及视频和单帧模式。它适用于低光度和高动态范…

《GroupViT: Semantic Segmentation Emerges from Text Supervision》论文解读

会议&#xff1a;CVPR 年份&#xff1a;2022 代码&#xff1a;https://github.com/NVlabs/GroupViT 研究背景与动机&#xff1a; 传统深度学习系统中&#xff0c;图像区域的Grouping通常是隐式通过像素级识别标签的自上而下监督来实现的。作者提出将Grouping机制重新引入深…

本地部署,AnimeGANv3: 将现实世界照片转化为动漫风格

目录 引言 技术背景 架构与原理 实验结果与分析 应用实例 本地部署 运行结果 Photo to Hayao Style Photo to Shinkai Style more suprise 支持多种风格 结论 参考文献 GitHub - TachibanaYoshino/AnimeGANv3: Use AnimeGANv3 to make your own animation works, …

在 PostgreSQL 里如何处理数据的跨库关联查询性能优化?

文章目录 一、了解跨库关联查询的挑战&#xff08;一&#xff09;网络延迟&#xff08;二&#xff09;数据量庞大&#xff08;三&#xff09;索引不一致&#xff08;四&#xff09;数据库配置差异 二、优化策略&#xff08;一&#xff09;合理设计数据库架构&#xff08;二&…

【C++】:继承[下篇](友元静态成员菱形继承菱形虚拟继承)

目录 一&#xff0c;继承与友元二&#xff0c;继承与静态成员三&#xff0c;复杂的菱形继承及菱形虚拟继承四&#xff0c;继承的总结和反思 点击跳转上一篇文章&#xff1a; 【C】&#xff1a;继承(定义&&赋值兼容转换&&作用域&&派生类的默认成员函数…

亿康源用科技引领发展,开启大健康产业新篇章

&#xff08;本台记者报&#xff09;近日&#xff0c;杭州有一家公司凭借深厚的科技研发实力与卓越的创新能力在大健康领域屡受好评&#xff0c;其研发的新品一经推出便成为行业热议。为了探寻该公司的经营秘诀&#xff0c;我们找到了这家公司——亿康源&#xff0c;并有幸与亿…

C语言笔记34 •单链表经典算法OJ题-6.环形链表的约瑟夫问题•

环形链表的约瑟夫问题 1.问题 编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数&#xff0c;报到 m 的人离开。 下一个人继续从 1 开始报数。 n-1 轮结束以后&#xff0c;只剩下一个人&#xff0c;问最后留下的这个人编号是多少&#xff1f; 数据范围&#xff1a; 1…

postman录制设置

一、前言&#xff1a; ​ postman是一个很好接口调试或是测试工具&#xff0c;简单方便&#xff0c;不需要很复杂的流程与技术&#xff0c;并且也具备录制条件。对于接口不了解&#xff0c;没有明确对应的说明&#xff0c;但又想通过接口进行一些测试使用其录制是一个不错的办…

【YOLOv8系列】(四)YOLOv8使用自己的数据集进行模型训练,成就感满满

目录 一.数据集获取 1.使用开源数据集 2.自定义数据图片 二.数据集标注 1.标注工具介绍 2.labelme安装 3.数据标注 1.选择要标注的数据集文件夹 2.设置自动保存&#xff1a; 3.创建多边形标注 4.格式转换 1.安装labelme2yolo 2.格式转换 3.效果查看 4.其他格式…

腾讯开源 tlbs-map 地图组件库

腾讯宣布开源 tlbs-map&#xff0c;一个基于腾讯位置服务地图 API 开发的 web 端地图组件库&#xff0c;支持在网页绘制地图并在地图上绘制点、线、面、热力图等效果&#xff0c;支持 Vue2、Vue3、React 等业界主流技术栈&#xff0c;旨在帮助开发者低成本开发地图业务 Javascr…

大模型LLM 应用私有化部署项目

LLM 参数包含数十亿甚至万亿级的架构复杂&#xff0c;训练和推理涉及大量计算资源。企业客户训练资料少&#xff0c;在实际应用中可能表现出检索幻觉、精准度差&#xff0c;同时也带来了性能、安全性和效率等方面的挑战。 ChatGPT、LLaMa、Bard 等大语言模型(LLMs)取得了非常巨…

【前端】零基础学会编写CSS

一、什么是CSS CSS (Cascading Style Sheets&#xff0c;层叠样式表&#xff09;是一种是一种用来为结构化文档&#xff08;如 HTML 文档&#xff09;添加样式&#xff08;字体、间距和颜色等&#xff09;的计算机语言&#xff0c;能够对网页中元素位置的排版进行像素级别的精…

论文解读--4D mmWave Radar for Autonomous Driving Perception:A Comprehensive Survey

用于自动驾驶感知的4D毫米波雷达&#xff1a;综合综述 摘要 自动驾驶技术的快速发展推动了感知系统的不断创新&#xff0c;其中4D毫米波&#xff08;mmWave&#xff09;雷达是关键的传感设备之一。利用其全天候操作特性和在具有挑战性的环境中的强大感知能力&#xff0c;4D毫米…

keil5新建stm32工程的基本

1、建立工程文件夹&#xff0c;keil中新建工程&#xff0c;选择型号&#xff1b; 2、工程文件夹里建立自己所需要的文件夹等&#xff0c;复制固件库里面的文件到工程文件夹里&#xff1b; 3、将工程里建立对应的同名的分组&#xff0c;并将文件夹内的文件添加到工程分组中。 点…

buuctf_RE(第三页)

[SWPU2019]ReverseMe 找到关键函数&#xff0c;但是很长&#xff0c;也只能分析出一些零碎的东西&#xff0c;看 wp 是通过动调来缕清程序的逻辑的。 一个是用ida&#xff0c;还有一个OD都试试吧 还看到一个大佬是用的 ponce 解的&#xff0c;这个先放放。 调的太难受了 0.0 还…

未来互联网的新篇章:深度解析Facebook的技术与战略

随着科技的飞速发展和社会的不断变迁&#xff0c;互联网作为全球信息交流的重要平台&#xff0c;正经历着前所未有的变革和演进。作为全球最大的社交媒体平台之一&#xff0c;Facebook不仅是人们沟通、分享和互动的重要场所&#xff0c;更是科技创新和数字化进程的推动者。本文…