JavaScript数组实现扁平化四种方法详解
数组的扁平化就是将一个嵌套多层的数组 array(嵌套可以是任何层数)转换为只有一层的数组。
var arr = [1, [2, [3, 4, 5]]]; console.log(flatten(arr)); // [1, 2, 3, 4,5]
本文就是要用多种方法实现这个 flatten 函数
1. 常规递归法
var a = [1, [2, [3, 4, 5]]]; function flatten(arr) { let newArray = [] for (let i of arr) { if (i.constructor === Array) { newArray = newArray.concat(flatten(i)) } else { newArray.push(i) } } return newArray } console.log(flatten(a)); // [1, 2, 3, 4,5]
这段代码核心就是循环遍历过程中的递归操作,就是在遍历过程中发现数组元素还是数组的时候进行递归操作,把数组的结果通过数组的 concat 方法拼接到最后要返回的 result 数组上,那么最后输出的结果就是扁平化后的数组。
2. reduce方法
var a = [1, [2, [3, 4, 5]]]; function flatten(arr) { return arr.reduce((pre,next) => { return pre.concat(next instanceof Array ? flatten(next) : next) },[]) } console.log(flatten(a)); //[ 1, 2, 3, 4, 5 ]
我们可以看到 reduce 的第一个参数用来返回最后累加的结果,思路和第一种递归方法是一样的,但是通过使用 reduce 之后代码变得更简洁了,也同样解决了扁平化的问题。
3. 扩展运算符实现
// 方法3 var arr = [1, [2, [3, 4]]]; function flatten(arr) { while (arr.some(item => Array.isArray(item))) { arr = [].concat(...arr); } return arr; } console.log(flatten(arr)); // [1, 2, 3, 4,5]
我们先用数组的 some 方法把数组中仍然是组数的项过滤出来,然后执行 concat 操作,利用 ES6 的展开运算符,将其拼接到原数组中,最后返回原数组,达到了预期的效果。
4. split和toString共同处理
// 方法4 var arr = [1, [2, [3, 4]]]; function flatten(arr) { return arr.toString().split(','); } console.log(flatten(arr)); // [1, 2, 3, 4]
数组会默认带一个 toString 的方法,可以把数组直接转换成逗号分隔的字符串,然后再用 split 方法把字符串重新转换为数组
到此这篇关于JavaScript数组实现扁平化四种方法详解的文章就介绍到这了,更多相关JavaScript数组扁平化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
javascript将json格式数组下载为excel表格的方法
下面小编就为大家分享一篇javascript将json格式数组下载为excel表格的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2017-12-12javascript下对于事件、事件流、事件触发的顺序随便说说
向同一个标签 动态的添加事件是 执行的顺序在ie和其他非ie内核的浏览器有所不同 ie是“先进先出 ” 就是最先添加的最先执行,其他非ie内核的浏览器是 “先进后出”,就是 最后添加的事件 先执行。2010-07-07
最新评论