### 二维数组转一维数组的方法
#### 1. 使用扩展运算符
扩展运算符只能展开一层数组,若数组中还有数组,可多次使用扩展运算符展开。
```javascript
var a = [1, 2, 3, [4, 5]];
var newArr = [].concat(...a);
console.log(newArr); // [1, 2, 3, 4, 5]
```
#### 2. 使用数组的 `join()` 和 `split()` 方法
```javascript
var a = [1, 2, 3, [4, 5]];
var newArr = a.join().split(',');
// 注意:使用此方法后数组元素会变成字符串类型
console.log(newArr); // ["1", "2", "3", "4", "5"]
```
#### 3. 使用 `flat()` 方法
`flat()` 方法可以指定展开的深度,若要展开多层嵌套数组,可使用 `Infinity` 作为参数。
```javascript
// 嵌套一层 flat(1)
var a = [1, 2, 3, [4, 5]];
console.log(a.flat()); // [1, 2, 3, 4, 5]
// 嵌套多层 flat(Infinity)
console.log([1, [2, [3, [4, 5]]]].flat(Infinity)); // [1, 2, 3, 4, 5]
// flat() 还可以跳过空位
console.log([1, [2, , 3]].flat()); // [1, 2, 3]
```
#### 4. 使用递归方法
```javascript
var arr = [1, 2, 3, [4, 5]];
function flatten(arr) {
var res = [];
for (var i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
res = res.concat(flatten(arr[i]));
} else {
res.push(arr[i]);
}
}
return res;
}
console.log(flatten(arr)); // [1, 2, 3, 4, 5]
```
### 包含 `children` 的数组扁平化的方法
可以使用递归方法将包含 `children` 的数组扁平化。
```javascript
function flattenTree(arr) {
let result = [];
for (let item of arr) {
result.push(item);
if (item.children && item.children.length > 0) {
result = result.concat(flattenTree(item.children));
// 可以根据需求选择是否保留 children 属性
delete item.children;
}
}
return result;
}
// 示例数据
var tree = [
{ id: 1, text: '一级1', children: [
{ id: 3, text: '二级1-1', children: [
{ id: 7, text: '三级1-1-1' }
]}
]},
{ id: 2, text: '一级2', children: [
{ id: 5, text: '二级2-1' }
]}
];
var flattened = flattenTree(tree);
console.log(flattened);
```