扁平化数组的问题延伸

1次阅读

共计 468 个字符,预计需要花费 2 分钟才能阅读完成。

起因

在掘金上看到 100 道前端面试题,其中有一道题是这样的
有数组[11, 1, 3, 5 [4, 5], 2, [2, [44, 22, 1, [22, 13, 6]]]],将它变为[1,2,3…],即扁平化数组并排序

解答

答案点赞排名第一的大佬的解答如下:

Array.from(new Set(arr.flat(Infinity))).sort((a, b) => {return a - b;});

解析

首先,Array.from不做赘述,参见 ES6 语法数组转换
其次,new Set()set数据结构,因为其内值唯一的特性,可以完成数组去重
再者,是 Array.prototype.flat,mdn 内描述很详细,只是我没有用过 QAQ,其中还有用 reduce 结合 concat 实现 flat 的例子,这里也不多说了
最后,还有一个坑,是排序,这个我就忘了,因为默认的 sort 是先将数组转换字符串再比较的,这样的数组排序则是按照 code 码排序了,例如[101, 1, 2].sort() = [1, 101, 2]

总结

深入了解 api 的运作机制,灵活运用,不能总想自己造轮子和写算法,能“懒”则“懒”~

正文完
 0