一行JavaScrip可以做什么?

news2024/12/26 1:02:58

说在前面

JavaScript 提供了许多方便的方法和操作符来简化常见的任务,使得编程变得更加高效和便捷。无论是数学计算、字符串处理还是数据操作,JavaScript 都能帮助我们以简洁的方式实现所需功能。

代码

1、生成指定范围内的随机整数

const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;

该函数接受两个参数 minmax,并返回一个介于 minmax 之间的随机整数。

这个函数使用 Math.random() 方法生成一个0到1之间的随机小数,然后将其乘以 (max - min + 1),这将产生一个在 0max - min + 1 范围内的随机数。

接下来,通过使用 Math.floor() 向下取整,将这个随机数转换为整数。最后,将 min 添加到结果中,以确保生成的随机数在 minmax 之间。

2、打印 JSON 对象为格式化的 JSON 字符串

JSON.stringify(obj, null, 2);

JSON.stringify(obj, null, 2) 是一个用于将 JavaScript 对象转换为格式化的 JSON 字符串的函数调用,其中 obj 是要转换的 JavaScript 对象。

在这个函数调用中,第二个参数 null 表示在转换过程中不使用任何替换函数,而第三个参数 2 表示在输出的 JSON 字符串中使用两个空格缩进。

以下是一个示例,展示了如何使用 JSON.stringify 将 JavaScript 对象转换为格式化的 JSON 字符串:

const obj = {
  name: "zhangsan",
  age: 30,
};

const jsonString = JSON.stringify(obj, null, 2);
console.log(jsonString);

假设 obj 是上述示例中定义的对象,JSON.stringify(obj, null, 2) 将会返回以下格式化的 JSON 字符串:

image.png
这样的格式化输出更易于阅读,并且每个属性都会独占一行,配合了两个空格的缩进。

3、生成随机密钥

const cryptoKey = () => crypto.getRandomValues(new Uint32Array(1))[0].toString(16);

使用 crypto.getRandomValues() 方法生成一个随机的 32 位无符号整数,并将其转换为 16 进制字符串。

在这个函数中,new Uint32Array(1) 创建了一个包含一个元素的无符号 32 位整数数组。然后,crypto.getRandomValues() 方法将随机值填充到该数组中,并返回这个数组。接下来,通过索引访问数组中的第一个元素,并使用 toString(16) 将其转换为一个 16 进制字符串。

4、检查元素是否在视窗中

const elementInViewport = el => el.getBoundingClientRect().top >= 0 && el.getBoundingClientRect().bottom <= window.innerHeight;

该函数接受一个参数 el,表示要检查的元素。在函数内部,使用 getBoundingClientRect() 方法获取到 el 元素的位置信息,然后通过比较 topbottom 属性来判断元素是否在当前视口中可见。

具体来说,el.getBoundingClientRect().top >= 0 表示元素顶部是否在或者超出视口顶部,而 el.getBoundingClientRect().bottom <= window.innerHeight 表示元素底部是否在或者超出视口底部。

如果上述两个条件都满足,则说明元素完全在当前视口中可见,函数将返回 true,否则将返回 false

以下是使用 elementInViewport 函数检查元素是否在视口中可见的示例:

const element = document.getElementById('myElement');
if (elementInViewport(element)) {
  console.log('Element is in the viewport');
} else {
  console.log('Element is not in the viewport');
}

5、获取设备类型

const getDeviceType = () => /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ? 'Mobile' : 'Desktop';

使用了正则表达式 /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) 来检查用户代理字符串中是否包含移动设备的关键词。如果匹配成功,则返回 ‘Mobile’,否则返回 ‘Desktop’。

此正则表达式会检查 navigator.userAgent 中是否包含 Android、webOS、iPhone、iPad、iPod、BlackBerry、IEMobile 或 Opera Mini 这些关键词,如果包含其中任何一个,则判定为移动设备,否则判定为桌面设备。

以下是使用 getDeviceType 函数获取设备类型的示例:

const deviceType = getDeviceType();
console.log('Device type: ' + deviceType); // 输出设备类型

在浏览器环境中执行上述代码,将根据用户代理字符串判断设备类型,并输出 ‘Mobile’ 或 ‘Desktop’。

需要注意的是,用户代理字符串可能会被用户修改或者浏览器插件所影响,因此这种方式判断设备类型并不是十分准确,但在一般情况下可以提供一个大致的判断。

6、扁平化数组

const flatten = arr => arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val), []);

使用了 JavaScript 中的 reduce 方法来遍历数组,并根据数组元素的类型进行相应的处理。如果当前元素是一个数组,则递归调用 flatten 函数对其进行扁平化处理;否则直接将当前元素添加到累积结果中。

具体来说,arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val), []) 中的 reduce 方法对数组 arr 进行迭代,初始值为一个空数组 []。在每次迭代中,对当前元素 val 进行判断,如果是数组,则递归调用 flatten 函数,否则将其直接添加到累积结果数组 acc 中。

最终得到的累积结果就是将多维数组扁平化后的一维数组。

以下是使用 flatten 函数将多维数组扁平化的示例:

const nestedArray = [1, 2, [3, 4, [5, 6], 7], 8, [9]];
const flatArray = flatten(nestedArray);
console.log(flatArray); // 输出扁平化后的一维数组

image.png

在上述示例中,nestedArray 是一个嵌套的数组,经过 flatten 函数处理后,将得到一个扁平化的一维数组。

需要注意的是,JavaScript 中也提供了 flatMap 方法可以用于类似的扁平化操作,但是在处理多维数组时可能会有区别。

7、打乱数组

const shuffleArray = arr => arr.sort(() => 0.5 - Math.random());

使用了 sort 方法,传入一个比较函数 () => 0.5 - Math.random()。这个比较函数的作用是返回一个随机数,负数或正数的概率相等,从而实现对数组的随机排序。

在每次排序时,sort 方法会调用比较函数来决定元素的顺序,由于比较函数中使用了随机数,因此每次排序的结果都是随机的,从而实现了数组的随机排序(洗牌)。

以下是使用 shuffleArray 函数对数组进行随机排序的示例:

const myArray = [1, 2, 3, 4, 5];
shuffleArray(myArray);
console.log(myArray); // 输出随机排序后的数组

image.png

在上述示例中,myArray 是一个包含数字的数组,经过 shuffleArray 函数处理后,将得到一个随机排序的数组。

需要注意的是,这种方法虽然简单,但并不是一种严格意义上的均匀随机分布,如果要求高质量的随机性,建议使用专门的随机算法库来进行处理。

8、将小驼峰字符串转换为连接符(连字符)连接的字符串

const camelToDash = str => str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();

使用了正则表达式 /([a-z])([A-Z])/g 来匹配小驼峰字符串中的大写字母前的小写字母。然后使用 replace 方法将匹配到的子串替换为 $1-$2,其中 $1 表示第一个捕获组(即小写字母),$2 表示第二个捕获组(即大写字母)。最后使用 toLowerCase 方法将结果转换为全小写。

以下是使用 camelToDash 函数将小驼峰字符串转换为连接符连接的字符串的示例:

const myString = 'helloWorld;iLoveCode';
const dashedString = camelToDash(myString);
console.log(dashedString); // 输出转换后的连接符连接的字符串

image.png

9、将连接符(连字符)连接的字符串转换为小驼峰字符串

const dashToCamel = str => str.replace(/-([a-z])/g, (match, group) => group.toUpperCase());

使用了正则表达式 /-([a-z])/g 来匹配连字符后的小写字母。然后使用 replace 方法,第二个参数传入一个函数,对匹配到的子串进行处理,将匹配到的小写字母转换为大写字母。最终返回转换后的小驼峰字符串。

以下是使用 dashToCamel 函数将连接符连接的字符串转换为小驼峰字符串的示例:

const myString = 'hello-world;i-love-code';
const camelString = dashToCamel(myString);
console.log(camelString); // 输出转换后的小驼峰字符串

image.png

10、快速交换多个变量的值

[a,b,c] = [c,a,b]

执行这个表达式时,会将原数组中的第一个元素赋给 c,第二个元素赋给 a,第三个元素赋给 b,从而实现了位置交换。

举个例子,如果原数组是 [1, 2, 3],执行 [a,b,c] = [c,a,b] 后,会得到:

  • a = 3
  • b = 1
  • c = 2

image.png
这样,数组元素的位置就被成功交换了。这种使用解构赋值来实现元素位置交换的方式非常简洁和优雅,是 JavaScript 中常用的技巧之一。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

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

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

相关文章

【CCF BDCI 2023】多模态多方对话场景下的发言人识别 Baseline

模型简介 本基线模型共分为三个部分&#xff1a; 基于CNN的判断每张人脸是否是说话人的模型&#xff1b;基于Transformer-Encoder的判断同一段对话中不同轮次的说话人关系的模型&#xff1b;和使用上述两个预测结果求解二次型优化问题的说话人识别求解器。 基于CNN的判断每…

OpenAI调查ChatGPT故障;向量搜索的优势与局限

&#x1f989; AI新闻 &#x1f680; OpenAI调查ChatGPT故障&#xff0c;发布新AI产品GPTs和GPT-4 Turbo 摘要&#xff1a;OpenAI的ChatGPT和其他服务出现故障&#xff0c;经过调查后发现是由于DDoS攻击导致的异常流量模式。OpenAI在首届开发者大会上发布了新的AI产品GPTs&am…

Seaborn数据可视化综合应用Basemap和Seaborn在线闯关_头歌实践教学平台

Seaborn数据可视化综合应用Basemap和Seaborn 第1关 Seaborn第2关 Seaborn图形介绍第3关 Basemap 第1关 Seaborn 任务描述 本关任务&#xff1a;编写一个绘制每个月销售总额的折线图。 编程要求 本关的编程任务是补全右侧上部代码编辑区内的相应代码&#xff0c;根据输入文件路…

Maven 插件统一修改聚合工程项目版本号

目录 引言直接修改 pom.xml 的版本号的问题Maven 插件修改版本号开源项目微服务商城项目前后端分离项目 引言 在Maven项目中&#xff0c;我们通常有两种常见的方式来修改版本号&#xff1a;直接在pom.xml文件中手动编辑和利用Maven插件进行版本号调整。 本文将比较这两种修改…

如何用Python实现图像拼接画(把一堆小图拼成大图)

诸神缄默不语-个人CSDN博文目录 在这里的图像拼接画指的是一张大图由很多小图组成&#xff0c;效果就像这样&#xff1a; 原理&#xff1a;将大图拆成很多小块&#xff0c;每一块计算平均颜色&#xff0c;用平均颜色最相近的小图来替代&#xff0c;就可以。 直接遍历就可以&…

No198.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

雷达波形及MATLAB仿真

文章目录 前言一、雷达波形二、Matlab 仿真1、SFW 的距离分辨率和距离模糊①、MATLAB 源码②、仿真结果 三、资源自取 前言 本文对雷达波形的内容以思维导图的形式呈现&#xff0c;有关仿真部分进行了讲解实现。 一、雷达波形 思维导图如下图所示&#xff0c;如有需求请到文章…

C#中.NET 6.0控制台应用通过EF访问已建数据库

目录 一、新建.NET 6.0控制台应用并建立数据库连接 二、下载并安装EF程序包 三、自动生成EF模型和上下文 1.Blog类模型 2.Post类模型 3.数据库上下文 四、设计自己的应用 VS2022的.NET6.0、.NET7.0框架下默认支持EF7&#xff08;版本号7.0.13&#xff09;&#xff0c;除…

《QT从基础到进阶·二十五》界面假死处理

假如有这样一种情况&#xff0c;我们在主线程写了一个死循环&#xff0c;当程序运行到主线程的死循环代码后界面便卡死点了没有反应&#xff0c;这里提供几种方法处理界面假死的情况&#xff0c;保证比如主线程在执行死循环没有退出的时候点击界面不会卡死能继续执行其他功能。…

【c++】——类和对象(中)——实现完整的日期类

作者:chlorine 专栏:c专栏 我的花一定会开。 【学习目标】 拷贝复制——赋值运算符重载 目录 &#x1f393;运算符重载(-><...) &#x1f393;日期&天数 &#x1f393;前置和后置重载 我们完成了赋值运算符重载章节的学习&#xff0c;对operator关键字的使用有…

wpf devexpress项目中添加GridControl绑定数据

本教程讲解了如何添加GridControl到wpf项目中并且绑定数据 原文地址Lesson 1 - Add a GridControl to a Project and Bind it to Data | WPF Controls | DevExpress Documentation 1、使用 DevExpress Template Gallery创建一个新的空白mvvm应用程序&#xff0c;这个项目包括了…

算法笔记-第七章-队列

算法笔记-第七章-队列 队列的相关知识点c中队列queue用法队列的操作序列求和队列约瑟夫环-队列匹配队列 队列的相关知识点 大佬的讲解 c中队列queue用法 一&#xff1a;queue是一种容器转换器模板&#xff0c;调用#include< queue>即可使用队列类 二&#xff1a;使用q…

Python--集合----无序,去重,空集合只能用set()方法

集合&#xff08;set&#xff09;是一个无序的不重复元素序列。 特点&#xff1a;天生去重 无序 集合定义&#xff1a;在Python中&#xff0c;我们可以使用一对花括号 {} 或者 set()方法 来定义集合&#xff0c; 但是如果你 定义的集合是一个 空集合&#xf…

SpringCloud Alibaba(上):注册中心-nacos、负载均衡-ribbon、远程调用-feign

Nacos 概念&#xff1a;Nacos是阿里巴巴推出的一款新开源项目&#xff0c;它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos致力于帮助用户发现、配置和管理微服务&#xff0c;它提供了一组简单易用的特性集&#xff0c;包括动态服务发现、服务配置…

线性代数本质系列(二)矩阵乘法与复合线性变换,行列式,三维空间线性变换

本系列文章将从下面不同角度解析线性代数的本质&#xff0c;本文是本系列第二篇 向量究竟是什么&#xff1f; 向量的线性组合&#xff0c;基与线性相关 矩阵与线性相关 矩阵乘法与复合线性变换 三维空间中的线性变换 行列式 逆矩阵&#xff0c;列空间&#xff0c;秩与零空间 克…

P6入门:项目初始化9-项目详情之资源 Resource

前言 使用项目详细信息查看和编辑有关所选项目的详细信息&#xff0c;在项目创建完成后&#xff0c;初始化项目是一项非常重要的工作&#xff0c;涉及需要设置的内容包括项目名&#xff0c;ID,责任人&#xff0c;日历&#xff0c;预算&#xff0c;资金&#xff0c;分类码等等&…

HTTP服务器——tomcat的安装和使用

文章目录 前言下载tomcattomcat 文件bin 文件夹conf 文件lib 文件log 文件temp 文件webapps 文件work 目录 如何使用 tomcat 前言 前面我们已经学习了应用层协议 HTTP 协议和 HTTP 的改进版——HTTPS&#xff0c;这些协议是我们在写与服务器相关的代码的时候息息相关的&#x…

cocosCreator 之内存管理和释放

版本&#xff1a; 3.4.0 语言&#xff1a; TypeScript 环境&#xff1a; Mac 回顾 前面有两篇博客说明了&#xff1a; cocosCreator 之 resources动态加载、预加载 讲述了静态引用资源&#xff0c;动态加载和预加载相关cocosCreator 之 Bundle 讲述了AssetManager关于对内置…

将随机数设成3407,让你的深度学习模型再涨一个点!文再附3种随机数设定方法

随机数重要性 深度学习已经在计算机视觉领域取得了巨大的成功&#xff0c;但我们是否曾想过为什么同样的模型在不同的训练过程中会有不同的表现&#xff1f;为什么使用同样的代码&#xff0c;就是和别人得到的结果不一样&#xff1f;怎么样才能保证自己每次跑同一个实验得到的…

技术管理责任制度《一》

一、技术管理机构责任制 (1) 按各级技术人员的职责范围&#xff0c;分工负责&#xff0c;做好经常性的技术业务工作。 (2) 组织贯彻执行国家有关技术政策和上级办法的技术标准、规定、规程、和各项技术管理制。 (3) 负责收集和提供技术情报、技术资料、技术建议和技术措施等。 …