数组扁平化
数组扁平化其实挺有用的,在项目业务开发中,后台传过来的数据通常都是带有嵌套的。
比如我们实现获得拥有多级的评论数据列表,获得其中评论数的话,我们这时候可以将其扁平化,再进行计算。
let arr = [
[1, 2, 2],
[3, 4, 5, 5],
[6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
]
//ES6方法直接实现
arr = arr.flat(Infinity)
//通过toString 方法处理
arr = arr.toString().split(',').map(item => parseFloat(item));
arr = JSON.stringify(arr).replace(/(\[|\])/g, '').split(',').map(item => parseFloat(item));
/**
* 循环验证是否为数组
*/
while (arr.some(item => Array.isArray(item))) {
//这样可以去掉一层数组嵌套,所以不断循环,可以把内部嵌套的数组一套套删掉
arr = [].concat(...arr)
}
//自己实现数组的flat的api
(function () {
function myFlat() {
let result = [],
_this = this;
let fn = (arr) => {
for (let i = 0; i < arr.length; i++) {
let item = arr[i];
if (Array.isArray(item)) {
fn(item);
continue
}
result.push(item);
}
};
fn(_this)
return result;
}
Array.prototype.myFlat = myFlat
})
arr = arr.myFlat();
例如输入15
结果为[[1,2,3,4,5],[4,5,6],[7,8]]