问题是创建一个函数,该函数将给定的数组展平到作为参数传递的深度。深度基本上就是数组在数组中的深度。因此,任务是创建一个如下所示的函数:
function flatarray(arr, depth)如果传入的数组为:
[1, 2, 3, [4, 5, [6, 7], 8], [10, 11, [12, [13]]], 9];对于depth = 1,它应该返回1,2,3,4,5,6,7,8,10,11,12,13,9。在这里,由于depth为1,所以它将被完全展平。
对于depth = 2,它应该返回[1,2,3,4,5,6,7,8,10,11,12,13,9]。这里,当深度为2时,数组内部的数组应该被展平。
对于深度= 3,它应该返回[1,2,3,[4,5,6,7,8],[10,11,12,13,9]。诸若此类。
发布于 2021-07-24 12:09:39
const arr = [1, 2, 3, [4, 5, [6, 7], 8], [10, 11, [12, 13]], 9];
function flatten(arr, depth) {
if (depth === 1) {
return flattenArr(arr);
}
let res = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
res.push(flatten(arr[i], depth - 1));
} else {
res.push(arr[i]);
}
}
return res;
}
function flattenArr(arr) {
let res = [];
for (var i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
res = res.concat(flattenArr(arr[i]))
} else {
res.push(arr[i]);
}
}
return res;
}
console.log(flatten(arr, 3));我做到了。但是,不确定这是否是最好的方法。
张贴这个答案,以防将来有人需要它。
发布于 2021-07-24 12:49:30
我在sk01的答案中所做的小编辑(添加了默认参数,并使用let代替var)
附言:我试图编辑sk01的答案,但它显示“建议的编辑队列已满”,因此我将其作为答案发布
const arr = [1, 2, 3, [4, 5, [6, 7], 8], [10, 11, [12, 13]], 9];
function flatten(arr, depth = 1) {
if (depth === 1) {
return flattenArr(arr);
}
let res = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
res.push(flatten(arr[i], depth - 1));
} else {
res.push(arr[i]);
}
}
return res;
}
function flattenArr(arr) {
let res = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
res = res.concat(flattenArr(arr[i]))
} else {
res.push(arr[i]);
}
}
return res;
}
console.log(flatten(arr, 3));
https://stackoverflow.com/questions/68503014
复制相似问题