js 封装一个方法 将多维数组 拉平 递归
时间: 2023-07-07 20:06:43 浏览: 90
可以通过递归的方式来实现多维数组的拉平。以下是一个 JavaScript 方法:
```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;
}
```
这个方法会递归地遍历数组中的每个元素,如果元素是一个数组,就递归调用 `flatten` 方法,将子数组拉平后将结果加入到 `result` 数组中;如果元素不是数组,就将它加入到 `result` 数组中。最终返回 `result` 数组,即为拉平后的一维数组。
例如,对于以下多维数组:
```javascript
const arr = [1, [2, [3, 4], 5], 6];
```
调用 `flatten(arr)` 方法后,返回的结果为:
```javascript
[1, 2, 3, 4, 5, 6]
```
相关问题
多维数组递归转换一维数组
好的,这个问题我可以回答。将多维数组转换为一维数组可以使用递归算法来实现。具体实现步骤如下:
1. 首先定义一个空数组,用于存放转换后的一维数组。
2. 遍历多维数组中的每一个元素。
3. 判断当前元素是否为数组,如果是数组,则递归调用转换函数,将其转换为一维数组,并将返回的结果拼接到定义的空数组中。
4. 如果当前元素不是数组,则直接将其添加到空数组中。
5. 遍历完成后,返回转换后的一维数组。
下面是一个示例代码实现:
```
function multiDimensionalArrayToSingleDimensionalArray(arr) {
var result = [];
for(var i = 0; i < arr.length; i++) {
if(Array.isArray(arr[i])) {
result = result.concat(multiDimensionalArrayToSingleDimensionalArray(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
}
```
这个函数可以将任意维度的数组转换为一维数组。
请你编写一个函数,它接收一个 多维数组 arr 和它的深度 n ,并返回该数组的 扁平化 后的结果。 多维数组 是一种包含整数或其他 多维数组 的递归数据结构。 数组 扁平化 是对数组的一种操作,定义是将原数组部分或全部子数组删除,并替换为该子数组中的实际元素。只有当嵌套的数组深度大于 n 时,才应该执行扁平化操作。第一层数组中元素的深度被认为是 0。 请在没有使用内置方法 Array.flat 的前提下解决这个问题。 示例 1: 输入 arr = [1, 2, 3, [4, 5, 6], [7, 8, [9, 10, 11], 12], [13, 14, 15]] n = 0 输出 [1, 2, 3, [4, 5, 6], [7, 8, [9, 10, 11], 12], [13, 14, 15]] 解释 传递深度 n=0 的多维数组将始终得到原始数组。这是因为 子数组(0) 的最小可能的深度不小于 n=0 。因此,任何子数组都不应该被平面化。
好的,我可以帮你编写这个函数。以下是代码实现:
```
function flatten(arr, n) {
if (n === 0) { // 如果深度为0,直接返回原数组
return arr;
}
let result = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i]) && n > 0) { // 如果当前元素是数组且深度大于0,递归扁平化该数组
result = result.concat(flatten(arr[i], n - 1));
} else { // 否则,将当前元素添加到结果数组中
result.push(arr[i]);
}
}
return result;
}
```
该函数接收两个参数:一个多维数组和一个深度值。它先判断深度是否为0,如果是则直接返回原数组;否则,它遍历数组中的每个元素,如果当前元素是数组且深度大于0,递归扁平化该数组,否则将当前元素添加到结果数组中。最后,返回扁平化后的结果数组。
你可以使用以下代码测试该函数:
```
const arr = [1, 2, 3, [4, 5, 6], [7, 8, [9, 10, 11], 12], [13, 14, 15]];
const n = 0;
console.log(flatten(arr, n)); // 输出 [1, 2, 3, [4, 5, 6], [7, 8, [9, 10, 11], 12], [13, 14, 15]]
```
因为深度为0,所以函数返回原数组。
阅读全文