- 语法: flatten(array)
- 取出嵌套数组(多维)中的所有元素放到一个新数组(一维)中
- 如: [1, [3, [2, 4]]] ==> [1, 3, 2, 4]
ES2019 方法 flat(depth) 深度,默认值为 1。
- flat() 方法会移除数组中的空项
- 使用 Infinity,可展开任意深度的嵌套数组 ```javascript var arr = [1, 2, [3, 4]];
// 展开一层数组 arr.flat(); // 等效于 arr.reduce((acc, val) => acc.concat(val), []); // [1, 2, 3, 4]
// 使用扩展运算符 … const flattened = arr => [].concat(…arr);
```javascript
// 方法1:ES6中 Array.prototype.flat()
console.log(arr.flat(Infinity))
// 方法2:迭代的思路
function flat(arr, depth = 1) {
while (arr.some((item) => Array.isArray(item)) && depth > 0) {
arr = [].concat(...arr);
depth--;
}
return arr;
}
// 方法3:递归
function flat(arr, depth = 1) {
let result = [];
function _loop(arr) {
arr.forEach((item) => {
if (Array.isArray(item) && depth > 0) {
_loop(item, depth--);
} else {
result.push(item);
}
});
}
_loop(arr);
return result;
}
// 方法4:reduce + 递归
function flat(arr, depth = 1) {
return d > 0
? arr.reduce(
(acc, val) =>
acc.concat(Array.isArray(val) ? flat(val, depth - 1) : val),
[]
)
: arr.slice();
}
// toString
function flat (arr) {
return arr.toString().split(',').map(item => Number(item)) //转成字符串会只有一个逗号相隔
}
console.log(flat(arr))
// stringify
function flat (arr) {
let str = JSON.stringify(arr)
str = str.replace(/\[|\]/g, '') //去掉中括号
return str.split(',').map(item => Number(item)))
}
console.log(flat(arr))