< JavaScript小技巧:如何优雅的用【一行代码 】实现Js中的常用功能 >

简介: 在开发中,采用简洁的语法和结构,遵循一致的命名规范,具有良好的代码组织和注释,能很好的提高代码的质量。可读性:易于阅读和理解。清晰的命名、简洁的语法和良好的代码结构可以使代码的意图更加明确,降低理解代码的难度,提高代码的可读性。可维护性:易于维护。当代码逻辑清晰、结构简洁时,开发者可以更快速地定位和修复bug,进行功能扩展或修改。同时,可读性高的代码也有助于后续的代码重构和优化。可扩展性:更具有扩展性和灵活性。清晰的代码结构和简洁的代码风格使得添加新功能、修改现有功能或扩展代码更加容易。

image.png


今天这篇文章,给大伙分享一些 通过【 一行代码 】实现 Javascript 中 比较常用的一些方法和功能!

💬 前言

在开发中,采用简洁的语法和结构,遵循一致的命名规范,具有良好的代码组织和注释,能很好的提高代码的质量。

主要有以下几个优点:

  • 可读性:易于阅读和理解。清晰的命名、简洁的语法和良好的代码结构可以使代码的意图更加明确,降低理解代码的难度,提高代码的可读性。
  • 可维护性:易于维护。当代码逻辑清晰、结构简洁时,开发者可以更快速地定位和修复bug,进行功能扩展或修改。同时,可读性高的代码也有助于后续的代码重构和优化。
  • 可扩展性:更具有扩展性和灵活性。清晰的代码结构和简洁的代码风格使得添加新功能、修改现有功能或扩展代码更加容易。此外,简洁的代码往往更少依赖于特定的实现细节,提供了更多的灵活性和可替换性。
  • 错误减少和调试时间:更容易写出正确的逻辑,减少了出错的概率。同时,当代码出现问题时,优雅简洁的代码也更容易进行调试和定位错误。
  • 性能优化:简洁的代码通常更高效,减少了不必要的计算和资源消耗。精简的代码结构和算法可以提高代码的执行效率和性能

👉 数组相关

① 随机打乱数组顺序

const randomSort = list => list.sort(() => Math.random() - 0.5)
randomSort([0,1,2,3,4,5,6,7,8,9]) // 随机排列结果

② 借助 new Set()对数组去重 / 对象数组根据唯一值去重

这个知识点小温不止说过一次了,具体案例看代码!

// 普通数组去重
const removeDuplicates = list => [...new Set(list)]
removeDuplicates([0, 0, 2, 4, 5]) // [0,2,4,5]

// 对象数组唯一值去重
const duplicateById = list => [...list.reduce((prev, cur) => prev.set(cur.id, cur), new Map()).values()]
duplicateById([{
   
   id: 1, name: 'jack'}, {
   
   id: 2, name: 'rose'}, {
   
   id: 1, name: 'jack'}])
// [{id: 1, name: 'jack'}, {id: 2, name: 'rose'}]

③ 查找数组中 【 最值 】 出现的索引

// 最大值
const indexOfMax = (arr) => arr.reduce((pre, cur, i, a) => (cur > a[pre] ? i : pre), 0);
indexOfMax([1, 3, 9, 7, 5]); // 2

// 最小值
const indexOfMin = (arr) => arr.reduce((prev, curr, i, a) => (curr < a[prev] ? i : prev), 0)
indexOfMin([2, 5, 3, 4, 1, 0, 9]) // 5

👉 Web浏览器相关

① 重新加载当前页面,相当于 Ctrl + R

location.reload();

② 滚动到页面顶部

window.scrollTo(0, 0);

③ 指定元素滚动到可视窗口 起点 / 终点

// 起点
const scrollToTop = (element) =>
  element.scrollIntoView({
   
    behavior: "smooth", block: "start" })
scrollToTop(document.body)

// 终点
const scrollToBottom = (element) =>
  element.scrollIntoView({
   
    behavior: "smooth", block: "end" })
scrollToBottom(document.body)

借助 scrollIntoView 函数进行元素滚动, scrollIntoViewOptions 配置项如下:

注: scrollIntoViewOptions [可选],目前这个参数浏览器对它的支持并不好,可以查看下文图片

在这里插入图片描述

scrollIntoViewOptions 意义 可选
behavior 定义过渡动画 "instant"或"smooth"。默认为"auto"
block 定义垂直方向的对齐 "start","center","end"或"nearest"。默认为"center"
block 定义水平方向的对齐 "start","center","end"或"nearest"。默认为"center"

选项具体意义:

  • auto,表示没有平滑的滚动动画效果。
  • smooth,表示有平滑的滚动动画效果。

  • start,表示顶端 / 左端 对齐。
  • center,表示中间对齐。
  • end,表示底端 / 右端 对齐。
  • nearest
  • block > 如果元素完全在视口内,则垂直方向不发生滚动。如果元素未能完全在视口内,则根据最短滚动距离原则,垂直方向滚动父级容器,使元素完全在视口内。
  • inline > 如果元素完全在视口内,则水平方向不发生滚动。
    如果元素未能完全在视口内,则根据最短滚动距离原则,水平方向滚动父级容器,使元素完全在视口内。

④ 从给定文本中剥离 HTML标签 / 剔除HTML字符串中的标签

const stripHtml = (html) => new DOMParser().parseFromString(html, 'text/html').body.textContent || '';
stripHtml('<div>test</div>') // 'test'

因为HTML标签都是成双成对,且可预测规律。也可以使用正则来剔除HTML字符串中的HTML标签。具体如下:

// 去除 HTML标签
const deleteHTML = info => info.replace(/<\/?.+?\/?>/g, "")
deleteHTML('<div>test</div>') // 'test'

⑤ 将指定文本内容复制到粘贴板上

const copy = (text) => navigator.clipboard?.writeText && navigator.clipboard.writeText(text)
copy('你需要复制的文本')

⑥ 获取cookie

将cookie转换成需要的对象类型

const getCookie = () => document.cookie
    .split(';')
    .map((item) => item.split('='))
    .reduce((acc, [k, v]) => (acc[k.trim().replace('"', '')] = v) && acc, {
   
   })
getCookie()

👉 数据操作

① 使用解构赋值简化变量声明

// 传统变量声明
const firstName = person.firstName;
const lastName = person.lastName;
// 解构赋值简化
const {
   
    firstName, lastName } = person;

② 使用展开运算符进行数组和对象操作

// 合并数组
const combined = [...array1, ...array2];
// 复制对象
const clone = {
   
    ...original };

③ 使用对象解构和默认参数简化函数参数

// 传统参数设置默认值
function greet(name) {
   
   
 const finalName = name || 'Guest';
 console.log(`Hello, ${
     
     finalName}!`);
 }

 // 对象解构和默认参数简化
 function greet({
   
    name = 'Guest' }) {
   
   
 console.log(`Hello, ${
     
     name}!`);
 }

📃 参考文献

相关文章
|
26天前
|
JavaScript 前端开发 测试技术
在 golang 中执行 javascript 代码的方案详解
本文介绍了在 Golang 中执行 JavaScript 代码的四种方法:使用 `otto` 和 `goja` 嵌入式 JavaScript 引擎、通过 `os/exec` 调用 Node.js 外部进程以及使用 WebView 嵌入浏览器。每种方法都有其适用场景,如嵌入简单脚本、运行复杂 Node.js 脚本或在桌面应用中显示 Web 内容。
61 15
在 golang 中执行 javascript 代码的方案详解
|
9天前
|
JavaScript 容器
带方向感知功能的js图片遮罩层插件
带方向感知功能的js图片遮罩层插件
|
4天前
|
JavaScript 前端开发
【JavaScript】——JS基础入门常见操作(大量举例)
JS引入方式,JS基础语法,JS增删查改,JS函数,JS对象
|
1月前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
1月前
|
JavaScript 前端开发 容器
jQuery多功能滑块插件r-slider.js
r-slider.js是一款jQuery多功能滑块插件。使用该插件,可以制作出滑块、开关按钮、进度条、向导步骤等多种效果。
37 5
|
1月前
|
JavaScript 前端开发
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
|
1月前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
1月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API
使用JavaScript和Node.js构建简单的RESTful API
|
1月前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
30 1
JavaScript中的原型 保姆级文章一文搞懂