今天给大家分享一下JavaScript的数组扁平化。
1. 扁平化
数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。举个例子,假设有个名为 flatten 的函数可以做到数组扁平化,效果就会如下:
知道了效果是什么样的了,我们可以去尝试着写这个 flatten 函数了。
2. 递归
我们最一开始能想到的莫过于循环数组元素,如果还是一个数组,就递归调用该方法:
3. toString
如果数组的元素都是数字,那么我们可以考虑使用 toString 方法,因为:[1, [2, [3, 4]]].toString()
调用 toString 方法,返回了一个逗号分隔的扁平的字符串,这时候我们再 split,然后转成数字不就可以实现扁平化了吗?
然而这种方法使用的场景却非常有限,如果数组是 [1, '1', 2, '2'] 的话,这种方法就会产生错误的结果。
4. undercore
那么如何写一个抽象的扁平函数,来方便我们的开发呢,所有又到了我们抄袭 underscore 的时候了,在这里直接给出源码和注释,但是要注意,这里的 flatten 函数并不是最终的 _.flatten,为了方便多个 API 进行调用,这里对扁平进行了更多的配置。
解释下 strict,在代码里我们可以看出,当遍历数组元素时,如果元素不是数组,就会对 strict 取反的结果进行判断,如果设置 strict 为 true,就会跳过不进行任何处理,这意味着可以过滤非数组的元素。注意,以上实现的细节并不是完全按照 underscore。
学习相关推荐(编程必备辅助):
①:搜索关注公众号“只会写BUG”,分享更多干货知识,资讯,教程等
②:海量编程类资料零基础到高级亟待领取!!!
如果觉得对你有一丢丢帮助,麻烦动动你的小手指【关注】一下上面的公众号吧,或者【转发】让更多人看到该文章。大家也可积极后台给我留言,多多交流,共同进步。