1. 初始化数组
如果想要初始化一个指定长度的一维数组,并指定默认值,可以这样:
const array = Array(6).fill(''); // ['', '', '', '', '', ''] 复制代码
如果想要初始化一个指定长度的二维数组,并指定默认值,可以这样:
const matrix = Array(6).fill(0).map(() => Array(5).fill(0)); // [[0, 0, 0, 0, 0], // [0, 0, 0, 0, 0], // [0, 0, 0, 0, 0], // [0, 0, 0, 0, 0], // [0, 0, 0, 0, 0], // [0, 0, 0, 0, 0]] 复制代码
2. 数组求和、求最大值、最小值
const array = [5,4,7,8,9,2]; 复制代码
数组求和:
array.reduce((a,b) => a+b); 复制代码
数组最大值:
array.reduce((a,b) => a > b ? a : b); Math.max(...array) 复制代码
数组最小值:
array.reduce((a,b) => a < b ? a : b); Math.min(...array) 复制代码
使用数组的reduce方法可以解决很多数组的求值问题。
3. 过滤错误值
如果想过滤数组中的false、0、null、undefined等值,可以这样:
const array = [1, 0, undefined, 6, 7, '', false]; array.filter(Boolean); // [1, 6, 7] 复制代码
4. 使用逻辑运算符
如果有一段这样的代码:
if(a > 10) { doSomething(a) } 复制代码
可以使用逻辑运算符来改写:
a > 10 && doSomething(a) 复制代码
这样写就会简洁很多,如果逻辑与&&操作符前面的值为假,就会发生短路操作,直接结束这一句的执行;如果为真,就会继续执行&&后面的代码,并返回后面代码的返回值。使用这种方式可以减少很多if...else判断。
5. 判断简化
如果有下面的这样的一个判断:
if(a === undefined || a === 10 || a=== 15 || a === null) { //... } 复制代码
就可以使用数组来简化这个判断逻辑:
if([undefined, 10, 15, null].includes(a)) { //... } 复制代码
这样代码就会简洁很多,并且便于扩展,如果还有需要等于a的判断,直接在数组中添加即可。
6. 清空数组
如果想要清空一个数组,可以将数组的length置于0:
let array = ["A", "B", "C", "D", "E", "F"] array.length = 0 console.log(array) // [] 复制代码
7. 计算代码性能
可以使用以下操作来计算代码的性能:
const startTime = performance.now(); // 某些程序 for(let i = 0; i < 1000; i++) { console.log(i) } const endTime = performance.now(); const totaltime = endTime - startTime; console.log(totaltime); // 30.299999952316284 复制代码
8. 拼接数组
如果我们想要拼接几个数组,可以使用扩展运算符:
const start = [1, 2] const end = [5, 6, 7] const numbers = [9, ...start, ...end, 8] // [9, 1, 2, 5, 6, 7 , 8] 复制代码
或者使用数组的concat()方法:
const start = [1, 2, 3, 4] const end = [5, 6, 7] start.concat(end); // [1, 2, 3, 4, 5, 6, 7] 复制代码
但是使用concat()方法时,如果需要合并的数组很大,那么concat() 函数会在创建单独的新数组时消耗大量内存。这时可以使用以下方法来实现数组的合并:
Array.prototype.push.apply(start, end) 复制代码
通过这种方式就能在很大程度上较少内存的使用。
9. 对象验证方式
如果我们有一个这样的对象:
const parent = { child: { child1: { child2: { key: 10 } } } } 复制代码
很多时候我们会这样去写,避免某一层级不存在导致报错:
parent && parent.child && parent.child.child1 && parent.child.child1.child2 复制代码
这样代码看起来就会很臃肿,可以使用JavaScript的可选链运算符:
parent?.child?.child1?.child2 复制代码
这样实现和效果和上面的一大长串是一样的。
可选链运算符同样适用于数组:
const array = [1, 2, 3]; array?.[5] 复制代码
可选链运算符允许我们读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。在引用为空(null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined。
10. 验证undefined和null
如果有这样一段代码:
if(a === null || a === undefined) { doSomething() } 复制代码
也就是如果需要验证一个值如果等于null或者undefined时,需要执行一个操作时,可以使用空值合并运算符来简化上面的代码:
a ?? doSomething() 复制代码
这样,只有a是undefined或者null时,才会执行控制合并运算符后面的代码。空值合并操作符(??)是一个逻辑操作符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。
11. 数组元素转化为数字
如果有一个数组,想要把数组中的元素转化为数字,可以使用map方法来实现:
const array = ['12', '1', '3.1415', '-10.01']; array.map(Number); // [12, 1, 3.1415, -10.01] 复制代码
通过这种方式,map会在遍历数组时,对数组的每个元素执行Number构造函数并返回结果。