Skip to content

鼓励作者:欢迎打赏犒劳

数组扁平化

需求:多维数组 ——> 一维数组

javascript
let arr = [1, [2, [3, [4, 5]]], 6]; // -> [1, 2, 3, 4, 5, 6]
let str = JSON.stringify(arr);

1. ES6 中的 flat 方法

javascript
arr = arr.flat(Infinity);

2. replace + split

javascript
arr = str.replace(/(\[|\])/g, '').split(',');

3. replace + JSON.parse

javascript
str = str.replace(/(\[|\])/g, '');
str = '[' + str + ']';
arr = JSON.parse(str);

4.普通递归

let result = [];
let fn = function (arr) {
	for (let i = 0; i < arr.length; i++) {
		let item = arr[i];
		if (Array.isArray(item)) {
			fn(item)
		} else {
			result.push(item)
		}
	}
}

5.reduce 函数迭代

javascript
function flatten(arr) {
    return arr.reduce((pre, cur) => {
        return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);
    }, []);
}

6.扩展运算符

javascript
while (arr.some(Array.isArray)) {
    arr = [].concat(...arr);
}

参考资料