这些数组小技巧,你都知道吗?

1,445 阅读4分钟

这是我参与「掘金日新计划 · 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.交集、并集、差集

对于这三种,在实际的开发中其实并不是很常见,相对常见一点的是交集,通常运用与接口传递

比如:一个表格,有idnametime等多个字段组合,但可以通过 idname 进行查询,通常而言,接口不会通过name去查询,而是通过id去查, 也就是说我们最终传递给接口的只有一个字段,也就是idname的交集

遇到这种情况,我们应该怎么解决?总不可能通过依次遍历两个数组,再把相同的元素提出来吧,那这种方法不但麻烦,而且感觉很 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

致此,有关数组的小方法就已经完成了,大家有什么更好的小技巧,欢迎在评论区讨论,喜欢的点个赞👍🏻支持下吧(● ̄(エ) ̄●)