首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按给定深度展平数组

按给定深度展平数组
EN

Stack Overflow用户
提问于 2021-07-24 01:24:29
回答 2查看 75关注 0票数 1

问题是创建一个函数,该函数将给定的数组展平到作为参数传递的深度。深度基本上就是数组在数组中的深度。因此,任务是创建一个如下所示的函数:

代码语言:javascript
运行
复制
function flatarray(arr, depth)

如果传入的数组为:

代码语言:javascript
运行
复制
[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]。诸若此类。

EN

回答 2

Stack Overflow用户

发布于 2021-07-24 12:09:39

代码语言:javascript
运行
复制
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));

我做到了。但是,不确定这是否是最好的方法。

张贴这个答案,以防将来有人需要它。

票数 1
EN

Stack Overflow用户

发布于 2021-07-24 12:49:30

我在sk01的答案中所做的小编辑(添加了默认参数,并使用let代替var)

附言:我试图编辑sk01的答案,但它显示“建议的编辑队列已满”,因此我将其作为答案发布

代码语言:javascript
运行
复制
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));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68503014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档