原由
在掘金上看到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的运做机制,灵活运用,不能总想本身造轮子和写算法,能“懒”则“懒”~