数据扁平化方法
需求:多维数组 => 一维数组
let ary = [1,[2,[3,[4,5]]],6]
方法一:js原生的flat
// 根据js原生的flat方法
let ary = [1,[2,[3,[4,5]]],6]
let newAry = ary.flat(Infinity) // Arrayflat(depth) 参数是原始数组深度 也可以写Infinity
Arrayflat(depth) 参数是原始数组深度也可以写Infinity ,Infinity 代表将会展开任何深度的数组,但是如果应用程序遇到嵌套足够深的数组则可能会耗尽内内存。建议使用更小的有限餐护士值。
方法二:replace方法
// 把数组变成字符串
let str = JSON.stringify(ary)
// 一种方法 去掉字符串中所有的间括号,最后再转换成数组
ary = str.replace(/\[|]/g, '').split(',');
// 另一种方法 去掉字符串的间括号,使用模板字符串拼接 外面间括号,再转为对象
str = str.replace(/\[|]/g, '')
str = `[${str}]`
ary = JSON.parse(str)
方法三:递归处理
// 方法一
let result = [];
let flat = function (ary) {
ary.forEach(element => {
if(Array.isArray(element)){
flat(element)
}else{
result.push(element)
}
});
return result
}
console.log(flat(ary))
// 方法二
Array.prototype.flat = function () {
let arr = []
this.forEach(item => {
if (Array.isArray(item)) {
arr = arr.concat(item.flat())
} else {
arr.push(item)
}
});
return arr
}
console.log(ary.flat())
方法四:reduce
function flat(ary) {
return ary.reduce((acc, val) => Array.isArray(val) ? acc.concat(flat(val)) : acc.concat(val), []);
}
console.log(flat(ary))
方法五:扩展运算符
while (ary.some(Array.isArray)) {
ary = [].concat(...ary);
}