js实现数组扁平化的五种方法原创
原创-
Array.prototype.flat
flat()
该方法按照指定的深度递归地遍历数组,并将所有元素与遍历到新数组中的子数组中的元素组合在一起。
let arr = [1,2,[3,4],5,6]
arr = arr.flat(Infinity)
console.log(arr) // [1,2,3,4,5,6]
-
普通递归
function flatten2(arr){ let res = [] for(let i = 0; i < arr.length; i++) { const item = arr[i] if(Array.isArray(item)) { res = res.concat(flatten(item)) } else { res.push(item) } } return res }
-
reduce实现递归
function flatten3(arr){ return arr.reduce((prev,curr) => { return prev.concat(Array.isArray(curr) ? flatten3(curr) : curr) },[]) }
-
扩展算子
扩展算子是ES6的新功能之一,使用它来操作数组可以直接扩展第一层数组。使用此功能,我们可以在没有递归的情况下展平数组,因为每次递归都是对当前分层数组的展开,而展开运算符会完成这项工作。
// 4.扩展算子
function flatten4(arr){
while(arr.some(i => Array.isArray(i))) {
// ...arr => 1 2 [3 , 4] 5 6
arr = [].concat(...arr)
}
return arr
}
-
正则表达式
function flatten5(arr) { let str = JSON.stringify(arr); str = str.replace(/([|])/g, ); // 拼接最外层的层成为JSON一种可以解析的格式。 str = [ + str + ]; return JSON.parse(str); }
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除