当前位置:网站首页>JS快速高效开发技巧指南(持续更新)
JS快速高效开发技巧指南(持续更新)
2022-08-03 10:56:00 【InfoQ】
1、数组篇
1.1、数组求和
let arr = [1, 2, 3, 4, 5]
let sum01 = arr.reduce((prev, curr) => prev + curr)
let sum02 = eval(arr.join('+'))
let arr02 = [{"age": 12}, {"age": 13}, {"age": 14}, {"age": 15}]
let sum03 = arr.reduce((prev, curr) => {
console.log(prev)
return prev + curr.age
}, 0); // 使用reduce第二个参数:initialValue:设定开始的prev值,不然遍历对象会有问题。如果是空数组,也需要用到initialValue
1.2、获取最大/最小值
let arr = [1, 4, 5, 3, 2]
arr.sort((a, b)=>a-b) // 生序
let min01 = arr[0]
let max01 = arr[arr.length - 1]
let min02 = eval(`Math.min(${arr.join(',')})`)
let max02 = eval(`Math.max(${arr.join(',')})`)
let min03 = Math.min.apply(null, arr)
let max03 = Math.max.apply(null, arr)
let min04 = arr.reduce((prev, curr) => prev > curr ? curr : prev)
let max04 = arr.reduce((prev, curr) => prev > curr ? prev : curr)
let arr = [{"age": 12}, {"age": 13}, {"age": 14}, {"age": 15}]
let arrAge = arr.map(item => item.age)
1.3、快速排序
let arr = [10, 1, 5, 9, 6, 8]
arr.sort((a, b)=>a-b) // 生序
arr.sort((a, b)=>b-a) // 降序
let arr = ['haha', 'hehe', 'hei', 'ai', 'ge']
arr.sort() // 生序
arr.reverse() // 降序
let arr = [{"name": "ha"}, {"name": "ws"}, {"name": "gw"}, {"name": "ts"}]
arr.sort((a, b) => a.name.localeCompare(b.name)) // 生序
arr.sort((a, b) => b.name.localeCompare(a.name)) // 降序
// 值为数字类似上文,-比对
1.4、数组初始化
Array.from(arr, mapFun, thisArg):// 创建长度为10的数组,初始化每个元素占位为0
let arr = Array(10).fill(0)
// 创建一个长宽都为10 的矩阵,(二维数组),元素占位为0
let arr = Array.from(Array(10).fill(0), () => Array(10).fill(0))
1.5、去重
[...Array01, ...Array02, ...Array03]let arr = [1, 2, 3, 3, 2, 5, 7]
arr = arr.filter((item, index, array) => array.indexOf(item) === index)
arr = [...new Set(arr)]
1.6、数组合并
let arr = [...arr1, ...arr2, ...arr3]
2、对象篇
2.1、对象合并
Object.assign()let obj = Object.assign({}, obj1, obj2)
let obj0 = {...obj, ...obj1, ...obj2}
2.2、箭头函数
const a = {
b: 'baba',
m: () => {
console.dir(this.b) // 此时的this,就是个{},跟父范围无关
}
}
// 推荐统一为:
const a = {
b: 'baba',
m() {
console.dir(this.b) // 输出 baba
}
}
3、Math篇
3.1、巧用随机函数
let n = Math.random(10); // 取[0, 10)之间的随机数,左闭右开,如果无参就是取[0, 1)之间的
let index = Math.floor(Math.random(arr.length)); // floor: 向下取整,舍去小数部分
let arr = [1, 2, 3, 4, 5]
arr.sort(() => {
return Math.random() - 0.5
})
4、函数篇
4.1、可变参数
function a(...args) {
console.dir(args) // 数组,
console.dir(arguments) // 对象,每一个函数都有自己的arguments
}
// 固定必传项,其余为可传
function b(p, ...args){
console.dir(args)
console.dir(arguments)
}
a('a', 'b', 'c')
b('a', 'b', 'c')
4.2、默认参数
function a(arr, l = arr.length - 1) {
console.log(l)
}
a([1, 2])
a('a', 2)
4.3、定义延时
Thread.sleep()/**
* 定义sleep函数
* @param interval
* @returns {Promise<void>}
*/
async function sleep(interval) {
await new Promise(r => setTimeout(r, interval));
}
async function doTings() {
//……
await sleep(1000);
//……
}
4.4、定义重试
sleep/**
* @param fn: 目标函数
* @param args: 目标函数参数列表
* @param retriesMax: 最大重试次数
* @returns {Promise<void>}
*/
async function retry(fn, args = [], retriesMax = 2) {
for (let i = 0; i < retriesMax; i++) {
try {
return await fn.appply(null, args)
} catch (error) {
if (retriesMax === i + 1) {
throw error;
}
await sleep(1000)
}
}
}
5、其他篇
5.1、空合并(??)
nullundefinedlet a = false ?? 'haha'; // a = false
let b = null ?? 'hehe'; // b = 'hehe'
let c = undefined ?? 'hihi'; // c = 'hihi'
5.2、对象属性分离
Object.keysObject.valuesObject.entrieslet obj = {name: 'ike', gender: true}
let keys = Object.keys(obj);
let values = Object.values(obj);
let entries = Object.entries(obj); // 返回 [ [ 'name', 'ike' ], [ 'gender', true ] ]
5.3、去除字符串首尾空格
trim()let str = ' baa '
let strNew = str.trim()
边栏推荐
- Machines need tokens more than people
- With strong network, China mobile to calculate excitation surging energy network construction
- Machine Learning (Chapter 1) - Feature Engineering
- 后台图库上传功能
- 干货!一种被称为Deformable Butterfly(DeBut)的高度结构化且稀疏的线性变换
- 记某社区问答
- CADEditorX ActiveX 14.1.X
- Mysql OCP 72 questions
- OS层面包重组失败过高,数据库层面gc lost 频繁
- 创建C UDR时,指定的HANDLESNULLS的作用是什么?
猜你喜欢

synchronized

如何改变sys_guid() 返回值类型

消费者认可度较高 地理标志农产品为啥“香”

redis基础知识总结——数据类型(字符串,列表,集合,哈希,集合)

深度学习经典网络 -- Inception系列(稀疏结构)

如何检索IDC研究报告?

Polymorphism in detail (simple implementation to buy tickets system simulation, covering/weight definition, principle of polymorphism, virtual table)

MySQL数据库高级使用

APENFT FOUNDATION官宣2022艺术梦想基金主题征集

Binary search tree (search binary tree) simulation implementation (there is a recursive version)
随机推荐
Pixel mobile phone system
【LeetCode—第2题 两数之和 代码详解 】附有源码,可直接复制
程序员架构修炼之道:如何设计出可持续演进的系统架构?
Web Server 设置缓存响应字段的一些推荐方案
Analysis of the idea of the complete knapsack problem
[Output each bit of an integer, from high to low.With and without recursion]
ARIMA实现(亲测可用)
Cross-chain bridge protocol Nomad suffers hacker attack, losing more than $150 million
聊天app开发——防炸麦以及节省成本的内容鉴定方法
CADEditorX ActiveX 14.1.X
微信多开批处理(自动获取安装路径)
苏州大学:从PostgreSQL到TDengine
Who is more popular for hybrid products, depending on technology or market?
【AppCube】数字孪生万物可视 | 联接现实世界与数字空间
Matplotlib
[华为云在线课程][SQL语法入门][学习笔记]
二叉搜索树(搜索二叉树)模拟实现(有递归版本)
complete knapsack problem
从餐桌到太空,孙宇晨的“星辰大海”
玉溪卷烟厂通过正确选择时序数据库 轻松应对超万亿行数据