当前位置:网站首页>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、空合并(??)
null
undefined
let a = false ?? 'haha'; // a = false
let b = null ?? 'hehe'; // b = 'hehe'
let c = undefined ?? 'hihi'; // c = 'hihi'
5.2、对象属性分离
Object.keys
Object.values
Object.entries
let 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()
边栏推荐
- APENFT FOUNDATION官宣2022艺术梦想基金主题征集
- 白帽黑客与留守儿童破壁对“画”!ISC、中国光华科技基金会、光明网携手启动数字安全元宇宙公益展
- 如何改变sys_guid() 返回值类型
- For invoice processing DocuWare, cast off the yoke of the paper and data input, automatic processing all the invoice received
- 面试一面
- 多态详细讲解(简单实现买票系统模拟,覆盖/重定义,多态原理,虚表)
- 【文件IO的简单实现】
- 如何通过DBeaver 连接 TDengine?
- 后台图库上传功能
- Basic using MySQL database
猜你喜欢
Advanced use of MySQL database
创建C UDR时,指定的HANDLESNULLS的作用是什么?
Analysis of the idea of the complete knapsack problem
Polymorphism in detail (simple implementation to buy tickets system simulation, covering/weight definition, principle of polymorphism, virtual table)
深度学习经典网络 -- Inception系列(稀疏结构)
Simple implementation of a high-performance clone of Redis using .NET (1)
开源一夏 | 教你快速实现“基于Docker快速构建基于Prometheus的MySQL监控系统”
鸿蒙第四次
【多线程的相关内容】
孙宇晨式“溢价逻辑”:不局限眼前,为全人类的“星辰大海”大胆下注
随机推荐
Who is more popular for hybrid products, depending on technology or market?
如何通过DBeaver 连接 TDengine?
巴比特 | 元宇宙每日必读:玩家离场,平台关停,数字藏品市场正逐渐降温,行业的未来究竟在哪里?...
面试一面
白帽黑客与留守儿童破壁对“画”!ISC、中国光华科技基金会、光明网携手启动数字安全元宇宙公益展
「全球数字经济大会」登陆 N 世界,融云提供通信云服务支持
【网络原理的概念】
Pixel mobile phone system
complete knapsack problem
go——并发编程
面试官:工作两年了,这么简单的算法题你都不会?
Depth study of 100 cases - convolution neural network (CNN) to realize the clothing image classification
出色的移动端用户验证
优炫数据库在linux平台下服务启动失败的原因
LyScript implements memory stack scanning
MySQL数据库高级使用
机器学习(第一章)—— 特征工程
【AppCube】数字孪生万物可视 | 联接现实世界与数字空间
本周四晚19:00知识赋能第4期直播丨OpenHarmony智能家居项目之设备控制实现
【二分查找详解外加递归写法】附有全部代码