js数组扁平化的实现
时间: 2024-06-13 19:08:01 浏览: 116
以下是两种JavaScript数组扁平化的实现方法:
1. 使用递归实现数组扁平化
```javascript
function flatten(arr) {
var result = [];
for (var i = 0, len = arr.length; i < len; i++) {
if (Array.isArray(arr[i])) {
result = result.concat(flatten(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
}
var arr = [1, [2, [3, 4, 5]]];
console.log(flatten(arr)); // [1, 2, 3, 4, 5]
```
2. 使用JSON.stringify和JSON.parse方法实现数组扁平化
```javascript
let arr = [1, 2, [3, 4, [5, 6]]];
let res = JSON.stringify(arr).replace(/\[|\]/g, '');
res = JSON.parse('[' + res + ']');
console.log('parse方法:', res); // [1, 2, 3, 4, 5, 6]
```
相关问题
js数组扁平化
JavaScript中可以使用递归或Array.prototype.flat()方法来实现数组扁平化。
递归的实现方式如下:
```javascript
function flatten(arr) {
let result = [];
for(let i = 0; i < arr.length; i++) {
if(Array.isArray(arr[i])) {
result = result.concat(flatten(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
}
```
使用Array.prototype.flat()方法实现方式如下:
```javascript
let arr = [1, 2, [3, 4], [5, [6, 7]]];
let flattenedArr = arr.flat(Infinity);
console.log(flattenedArr); // [1, 2, 3, 4, 5, 6, 7]
```
在上述代码中,使用了Infinity作为参数,确保了扁平化的深度无限。
js数组扁平化转树例子
假设有以下数组:
```js
const arr = [
{ id: 1, name: 'A', parent_id: 0 },
{ id: 2, name: 'B1', parent_id: 1 },
{ id: 3, name: 'B2', parent_id: 1 },
{ id: 4, name: 'C1', parent_id: 2 },
{ id: 5, name: 'C2', parent_id: 2 },
{ id: 6, name: 'C3', parent_id: 3 },
{ id: 7, name: 'D1', parent_id: 4 }
]
```
其中,每个对象代表一个节点,`id` 表示节点的唯一标识,`name` 表示节点的名称,`parent_id` 表示该节点的父节点的 `id`。
现在我们需要将这个数组转成树形结构,即:
```js
const tree = [
{
id: 1,
name: 'A',
children: [
{
id: 2,
name: 'B1',
children: [
{
id: 4,
name: 'C1',
children: [
{
id: 7,
name: 'D1',
children: []
}
]
},
{
id: 5,
name: 'C2',
children: []
}
]
},
{
id: 3,
name: 'B2',
children: [
{
id: 6,
name: 'C3',
children: []
}
]
}
]
}
]
```
实现方式如下:
```js
function flatToTree(arr, id = 0) {
const tree = []
arr.forEach(item => {
if (item.parent_id === id) {
const children = flatToTree(arr, item.id)
if (children.length) {
item.children = children
}
tree.push(item)
}
})
return tree
}
const arr = [
{ id: 1, name: 'A', parent_id: 0 },
{ id: 2, name: 'B1', parent_id: 1 },
{ id: 3, name: 'B2', parent_id: 1 },
{ id: 4, name: 'C1', parent_id: 2 },
{ id: 5, name: 'C2', parent_id: 2 },
{ id: 6, name: 'C3', parent_id: 3 },
{ id: 7, name: 'D1', parent_id: 4 }
]
const tree = flatToTree(arr)
console.log(tree)
```
输出结果:
```js
[
{
id: 1,
name: 'A',
children: [
{
id: 2,
name: 'B1',
children: [
{
id: 4,
name: 'C1',
children: [
{
id: 7,
name: 'D1',
children: []
}
]
},
{
id: 5,
name: 'C2',
children: []
}
]
},
{
id: 3,
name: 'B2',
children: [
{
id: 6,
name: 'C3',
children: []
}
]
}
]
}
]
```
阅读全文