这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情。
大家好,我是小杜杜,在工作中我们常常会处理各种各样的数据类型,其中最常见的一种便是数组
,对于数组的操作,相信大家都很熟悉,对于数组的操作有很多种方式,都能达到相同的效果,那么如何用最简单的方式来达到效果呢?接下来让我们逐一盘点下使用数组的小技巧,相信一定能更好的帮助你
1.数组去重
数组去重,可以说是最常见的操作,当大家需要对这个数组去重时,首先想到的是什么呢?
递归?sort?filter....
其实在这里有一个更好的方法,就是利用 Set
特别注意:
- 使用Set,必须使用 new 来声明
- new Set()返回的类型并不是数组,而是对象,所以需要配合Array.from()转化为数组,当然还可以通过展开运算符...,这里也推荐使用 ...
let arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a'];
console.log([...new Set(arr)])
// [1, 'true', true, 15, false, undefined, null, NaN, 'NaN', 0, 'a']
当然,用这个方法无法去除 {},原因是地址的指向不同,但对于大多数情况而言已经足够了。
2.交集、并集、差集
对于这三种,在实际的开发中其实并不是很常见,相对常见一点的是交集
,通常运用与接口传递
比如:一个表格,有id
、name
、time
等多个字段组合,但可以通过 id
、name
进行查询,通常而言,接口不会通过name
去查询,而是通过id
去查, 也就是说我们最终传递给接口的只有一个字段,也就是id
和name
的交集
遇到这种情况,我们应该怎么解决?总不可能通过依次遍历两个数组,再把相同的元素提出来吧,那这种方法不但麻烦,而且感觉很 low
,那有没有更好的方法去解决呢?
其实继续使用 Set
就能轻松解决了
let a = new Set([1, 2, 3])
let b = new Set([2, 3, 4])
//并集
console.log(...new Set([...a, ...b])) // Set(4) {1, 2, 3, 4}
//交集
console.log([...new Set([...a].filter(v => b.has(v)))]) // Set(2) {2, 3}
//差集
console.log([...new Set([...a].filter(v => !b.has(v)))]) // Set(1) {1}
3.数组拼接
多数组拼接会用什么方法呢?在老项目中或者老一点的前端中,最常用的便是concat
了,现在已经通过展开运算符来代替了
let a = [1, 2]
let b = [3, 4]
let c = [5, 6]
let res = [...a, ...b, ...c]
console.log(res) // [1, 2, 3, 4, 5, 6]
4.最大值和最小值
在找最大值和最小值的操作中,我们首先想到的应该是Math
const arr = [1, 2, 3]
//最大值
Math.max(...arr) // 3
//最小值
Math.min(...arr) //1
5.求和
对于求和而言,我们可以利用循环来解决,除此之外我们可以利用reduce
来解决,
const sum = arr => arr.reduce((a, b) => a + b, 0);
console.log(sum([1, 2, 3, 4])) // 10
6.数组扁平化
数组扁平化对我来说是个伤心的话题,在有一次面试中,面试官问我如何将数组扁平化,我当一脸懵的问他,扁平化是啥,面试官尴尬的说:[1, 2, [3, 4]] 如何变为 [1, 2, 3, 4],不知道有没有小伙伴遇见过,那会真是尴尬到死~
我给出的解答是 进行遍历,然后通过typeof
判断其是否时数组,如果是的话继续,不是就返回,当时面试官问我,那如果继续叠加呢?我说里用递归,然后面试官问我,你不觉得这样很麻烦吗?
其实这个考察什么,考察的只是flat
,结果尴尬的我和面试官硬生生的扯了半天。。。
let arr = [1, 2, [3, 4]].flat()
console.log(arr) // [1, 2, 3, 4]
let arr = [1, 2, [3, [4]]].flat(2)
console.log(arr) // [1, 2, 3, 4]
let arr = [1, 2, [3, [4, [5]]]].flat(Infinity)
console.log(arr) // [1, 2, 3, 4, 5]
调试
这几天在网上看到一个非常好玩的东西:console.table()
大家对 conole.log()、console.error()、什么的很熟悉吧,那么console.table()
会打出什么呢?
感兴趣的小伙伴可以试一试 console.table([1, 2, 3])
的效果是啥
End
致此,有关数组的小方法就已经完成了,大家有什么更好的小技巧,欢迎在评论区讨论,喜欢的点个赞👍🏻支持下吧(● ̄(エ) ̄●)