15 个杀手级 你可能从未听说过的 JS 技术

news2024/11/13 12:03:48

我们都同意,在 Google 或 StackOverflow 上搜索 Javascript 错误修复或答案并不有趣🏴‍☠️

这里有 20 种简短而强大的 JavaScript 技术,它们可以最大限度地提高生产力 并最大限度地减少痛苦 🩸

让我们深入研究代码🤘

独特的阵列

过滤掉数组中的重复值。

const arr = ["a", "b", "c", "d", "d", "c", "e"]
const uniqueArray = Array.from(new Set(arr));

console.log(uniqueArray); // ['a', 'b', 'c', 'd', 'e']

独特的对象数组

Set对象不允许您过滤掉重复的对象,因为每个对象都不同。 JSON.stringify在这里对我们有用。

const arr = [{ key: 'value' }, { key2: 'value2' }, { key: 'value' }, { key3: 'value3' }];
const uniqueObjects = Array.from(
  new Set(
    arr.map(JSON.stringify)
  )
).map(JSON.parse)

console.log(uniqueObjects);

数组迭代器索引

使用.map.forEachjavascript迭代函数,你可以得到每个项目的索引。

const arr = ['a', 'b', 'c'];
const letterPositions = arr.map(
  (char, index) => `${char} is at index ${index}`
)

按字符数拆分字符串

我们可以使用.match正则表达式函数按字符拆分字符串n

const str = "asdfghjklmnopq";
const splitPairs = str.match(/.{1,2}/g);

console.log(splitPairs); // ['as', 'df', 'gh', 'jk', 'lm', 'no', 'pq']

用不同的字符拆分字符串

另一个 regex hack.match允许你将像“aabbc”这样的字符串拆分成一个数组["aa", "bb", "c"]

const str = "abbcccdeefghhiijklll";
const splitChars = str.match(/(.)\1*/g);

console.log(splitChars); // ['a', 'bb', 'ccc', 'd', 'ee', 'f', 'g', 'hh', 'ii', 'j', 'k', 'lll']

遍历对象

Object.entries允许我们将 JSON 对象转换为键值对数组,从而使我们能够使用循环或数组迭代器对其进行迭代。

const obj = {
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
};
const iteratedObject = Object.entries(obj)
  .map(([key, value]) => `${key} = ${value}`);

console.log(iteratedObject); // ['key1 = value1', 'key2 = value2', 'key3 = value3']

键值数组到对象

您可以将“ Object.entryified”键值数组转换回对象Object.fromEntries

const entryified = [
  ["key1", "value1"],
  ["key2", "value2"],
  ["key3", "value3"]
];

const originalObject = Object.fromEntries(entryified);

console.log(originalObject); // { key1: 'value1', ... }

发生计数

您可能想计算一个项目在数组中出现的次数。我们可以使用.filter带有迭代器的函数来完成此操作。

const occurrences = ["a", "b", "c", "c", "d", "a", "a", "e", "f", "e", "f", "g", "f", "f", "f"];
// creating a unique array to avoid counting the same char more than once
const unique = Array.from(new Set(occurrences));

const occurrenceCount = Object.fromEntries(
  unique.map(char => {
    const occurrenceCount = occurrences.filter(c => c === char).length;
    return [char, occurrenceCount]
  })
)

console.log(occurrenceCount); // { a: 3, b: 1, c: 2, ... }

替换回调

.replace功能并不限制您只能用固定字符串替换。您可以将回调传递给它并使用匹配的子字符串。

const string = "a dog went to dig and dug a doggone large hole";
const replacedString = string.replace(/d.g/g, str => str + "gy")

console.log(replacedString); // a doggy went to diggy and duggy a doggygone large hole

条件链

你们中的许多人都熟悉在 JS 中遇到未定义的错误,条件链接可以防止很多这种情况的发生。

可选的链接( )运算?. 符访问对象的属性或调用函数。如果使用此运算符访问的对象或调用的函数未定义或为空,则表达式短路并计算为未定义,而不是抛出错误。
const obj = {
  "a": "aaaaaaa",
  "b": null
};

console.log(obj.b.d); // throws an error

console.log(obj.b?.d); // returns undefined

约束一个数字

通常,您可能需要将数字限制在特定范围内。每次需要时都用三元运算符来做是一件很痛苦的事情。函数要干净得多。

const constrain = (num, min, max) => {
  if(num < min) return min;
  else if(num > max) return max;
  else return num;
}

constrain(5, 1, 3) // 3
constrain(2, 1, 5) // 2
constrain(0, -100, 100) // 0

一个更好的方法是使用Math.minMath.max像这样:

const constrain = (num, min, max) => Math.min(Math.max(num, min), max)

索引数组的前后

.at函数允许您使用正数和负数从头到尾索引数组。

const arr = [1, 2, 3, 4, 5];

arr.at(0) // 1
arr.at(1) // 2
arr.at(-1) // 5
arr.at(-2) // 4

按字母顺序排序

按字母顺序对字符串数组进行排序

const words = ["javascript", "typescript", "python", "ruby", "swift", "go", "clojure"];
const sorted = words.sort((a, b) => a.localeCompare(b));

console.log(sorted); // ['clojure', 'go', 'javascript', 'python', 'ruby', 'swift', 'typescript']

💡提示a.localeCompare(b):您可以通过切换到在升序和降序之间切换顺序b.localeCompare(a)

按 Truthy/Falsy 值排序

您可以按真值/假值对数组进行排序,将具有真值的值放在最前面,然后是假值。

const users = [
  { "name": "john", "subscribed": false },
  { "name": "jane", "subscribed": true },
  { "name": "jean", "subscribed": false },
  { "name": "george", "subscribed": true },
  { "name": "jelly", "subscribed": true },
  { "name": "john", "subscribed": false }
];

const subscribedUsersFirst = users.sort((a, b) => Number(b.subscribed) - Number(a.subscribed))

Number(false)等于零,Number(true)等于一。这就是我们如何通过排序函数传递它。

四舍五入到n数字

您可以使用 . 将小数舍入为n数字.toFixed。请注意,.toFixed将数字转换为字符串,因此我们必须将其重新解析为数字。

console.log(Math.PI); // 3.141592653589793
console.log(Number(Math.PI.toFixed(2)))

感谢阅读

我愿意接受反馈。如果您有任何想法或意见,请务必在下面的评论中分享。

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

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

相关文章

人们最想看到的是:你在坚持什么?

【人们最想看到的是&#xff1a;你在坚持什么】 长远规划才能对抗不确定性 品牌也能够对抗不确定性 想想这么多年东搞搞&#xff0c;西搞搞 最后缺乏正向积累的【厚度】 趣讲大白话&#xff1a;把每滴水尽量接到碗里 人吃的是饭&#xff0c;拉出来的是信息 *********** 人们在频…

大数据周会-本周学习内容总结0102

目录 01、ElasticSearch-学习总结 02、SpringbootElasticSearch构建博客检索系统 01、将MySQL数据同步到ES中 02、SpringBoot集成ES 03、本周学习计划 第一次周会 大数据总监、搜狐四年-中国搜索 【mapReduce】sql 大数据代表&#xff1a;Hadoop、spark、es、flink zookee…

写给安徽合肥高三的你——少年不惧岁月长,敢挽桑弓射玉衡

文章目录说说我的看法英雄不论出处想帮帮你做科研&#xff0c;拼出个锦绣前程&#xff0c;朗朗乾坤&#xff01;我能做的可能很少&#xff0c;可是全世界都会为你让路说说我的看法 在今日头条看到你&#xff0c; 仿佛看到了年轻时候自己的影子&#xff0c;虽然自己现在在读研已…

PHP面向对象02:面向对象高级

PHP面向对象02&#xff1a;面向对象高级一、设计模式1. 单例模式2. 工厂模式二、面向对象三大特性1. 封装2. 继承3. 多态三、继承1. 实现继承2. 有限继承a. 属性都能继承b. 公有方法c. 受保护的方法d. 静态成员3. 重写4. PHP继承特点5. 静态延迟绑定6. 最终类和最终方法7. 抽象…

真空度精密控制技术在液相透射电子显微镜液体厚度调节中的应用

摘要&#xff1a;为了实现液相电子显微镜的更广泛和更便捷应用&#xff0c;需要对微芯片中的液体样本厚度进行精密调控。本文基于透射显微镜中被检液体样本内外压差对应于液体厚度这一凸起变形膨胀的基本现象&#xff0c;提出了通过精确控制液体池内部真空度来实现液体厚度精密…

【大数据离线开发】7.4 HBase数据保存和过滤器

7.4 数据保存的过程 注意&#xff1a;数据的存储&#xff0c;都需要注意Region的分裂 HDFS&#xff1a;数据的平衡 ——> 数据的移动&#xff08;拷贝&#xff09;HBase&#xff1a;数据越来越多 ——> Region的分裂 ——> 数据的移动&#xff08;拷贝&#xff09; …

美国原装KEYSIGHT E4981A(安捷伦) E4981A电容计

KEYSIGHT E4981A&#xff08;安捷伦&#xff09; Keysight E4981A&#xff08;安捷伦&#xff09;电容计为生产线中的陶瓷电容器测试提供了高速、可靠的测量。E4981A 实现了电容从小到大的测量能力&#xff0c;测量准确。Agilent E4981A 电容计有助于提高测试吞吐量&#xff0…

Structure|Alphafold2在肽结构预测任务上的基准实验

​题目&#xff1a;Benchmarking AlphaFold2 on peptide structureprediction 文献来源&#xff1a;2023, Structure 31, 1–9 代码&#xff1a;基准实验&#xff0c;比较了比较多的模型 1.背景介绍 由2-50个氨基酸构成的聚合物可以称为肽。但是关于肽和蛋白质之间的差异还是…

树莓派4b系统安装

文章目录一.树莓派系统和工具下载二.树莓派系统烧录一.树莓派系统和工具下载 树莓派系统下载&#xff1a;https://www.raspberrypi.com/software/operating-systems/ 下载系统镜像写入工具&#xff1a;Win32DiskImager https://sourceforge.net/projects/win32diskimager/ …

仅作笔记用:Windows 10 继续使用 IE 浏览器(针对23年2月14日的系统更新)

2 月 14 日更新后有部分 Windows 10 的用户反映 IE 浏览器无法使用&#xff0c;打开后变成 Edge 浏览器。由于有少数业内业务仍然必须使用 IE 浏览器&#xff0c;这里稍微研究了一下解决方法。 打开 IE 浏览器的时候会出现“IE已经合并进Edge浏览器”的提示&#xff0c;此时千…

华为手表开发:WATCH 3 Pro(10)获取心率

华为手表开发&#xff1a;WATCH 3 Pro&#xff08;10&#xff09;获取心率初环境与设备文件夹&#xff1a;文件新增第二页面引用包 import sensor from system.sensor;showHeartbeat.hmlshowHeartbeat.js修改首页 -> 新建按钮 “ 跳转 ”index.hmlindex.js 引用包&#xff1…

JVM系统优化实践(1):JVM概览

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e;这是多年之前做过的学习笔记&#xff0c;今天再翻出来&#xff0c;觉得仍然是记忆犹新。「独乐乐不如众乐乐」&#xff0c;就拿出来分享给「众乐乐」吧。目前大多…

BCN科研试剂:1263166-91-1,endo BCN-O-PNB,ENDO BCN - 活性酯(P-NPC)

试剂基团反应特点&#xff1a;endo BCN-O-PNB中在有机溶剂中很容易与含胺分子发生反应&#xff0c;PNB 是一个很好的离去基团&#xff0c;BCN 用于无铜点击化学反应。结构式&#xff08;Structural&#xff09;&#xff1a;基础产品数据&#xff1a;CAS号&#xff1a;1263166-9…

合并两个有序链表——递归解法

题目描述21. 合并两个有序链表难度简单2922收藏分享切换为英文接收动态反馈将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a;输入&#xff1a;l1 [1,2,4], l2 [1,3,4]输出&#xff1a;[1,1,2,3,4,4]示例…

【项目精选】基于B2C的网上拍卖系统_秒杀与竞价

点击下载源码 伴随着网络技术的广泛应用和高速发展&#xff0c;随着人们生活节奏的越来越快&#xff0c;越来越多的人们开始在网络中寻求便利。网络购物具备了省时、省事、省心、高效等特点&#xff0c;从而广泛被大众接受&#xff0c;并逐渐渗透到人们的生活中&#xff0c;成为…

当越来越多的企业不再使用FTP,该用什么更好的方案替代?

FTP作为第一个完整的文件传输协议&#xff0c;在互联网技术发展史上具有浓墨重彩的意义&#xff0c;它解决了文件传输协议有无的问题&#xff0c;在全世界范围内被广泛使用。但如今&#xff0c;随着网络技术的发展&#xff0c;企业生产类型和生产资料的丰富化&#xff0c;文件传…

Linux 系统目录结构

登录系统后&#xff0c;在当前命令窗口下输入命令&#xff1a; ls / 你会看到如下图所示: 树状目录结构&#xff1a; 以下是对这些目录的解释&#xff1a; /bin&#xff1a; bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 /boot&#xff1a; 这里…

米尔电子MYC-YT507H测试u8g2_OLED显示库

最近在测试u8g2库&#xff0c;准备是在单片机上使用的&#xff0c;不过目前我看到其也是支持了linux设备的&#xff0c;所以想着是不是能在T507上跑下。搜了下已经是有人做了移植了。官方现在应该也是支持了的&#xff0c;我选择别人开源的&#xff0c;因为介绍的还比较详细。开…

【基础语法】JavaScript 全栈体系(三)

JavaScript 基础 第三章 常量 一、常量的基本使用 概念&#xff1a;使用 const 声明的变量称为“常量”。使用场景&#xff1a;当某个变量永远不会改变的时候&#xff0c;就可以使用 const 来声明&#xff0c;而不是let。命名规范&#xff1a;和变量一致常量使用 // 声明一…

python 之 海龟绘图(turtle)

注&#xff1a;从个人博客园移植而来 使用简介 python 2.6引入的一个简单的绘图工具&#xff0c;俗称为海龟绘图。3.x以上使用的话&#xff0c;可通过pip进行安装&#xff0c;命令为&#xff1a; pip/pip3 install turtle如果出现如下错误&#xff1a; 解决方式&#xff1a; …