You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除嵌套数组以生成规整二维数组?代码问题求助

修正JavaScript函数以生成预期的二维数组

你的当前函数会把所有数组元素直接展开,导致普通一维数组(如[1,2,3,4])被拆分为单个元素,无法得到目标的规整二维数组。以下是修改后的实现:

修改后的代码(flatMap版本)

function convertArr () {

const separateNestedArrays = function (arr) {
  return arr.flatMap((element) => {
    if (Array.isArray(element)) {
      // 检查当前数组是否包含嵌套子数组
      const hasNestedArray = element.some(item => Array.isArray(item));
      // 有嵌套则展开,无嵌套则保留原数组作为单个元素
      return hasNestedArray ? element : [element];
    } else {
      // 兼容非数组元素,包装为一维数组
      return [[element]];
    }
  });
};

const twoDimensionalArray = [
  [1, 2, 3, 4],
  [[5, 6], [9, 10]],
  [5, 6, 7]
];

const modifiedArray = separateNestedArrays(twoDimensionalArray);

console.log(modifiedArray);
// 输出:[[1, 2, 3, 4], [5, 6], [9, 10], [5, 6, 7]]

};

逻辑说明

  • 利用flatMap的特性:返回的数组会被自动展开一层;
  • 对每个元素做判断:
    • 如果是数组,用some检测是否包含嵌套的子数组:
      • 若包含(如[[5,6],[9,10]]),直接返回该数组,flatMap会将其拆分为多个子数组元素;
      • 若不包含(如[1,2,3,4]),返回包裹原数组的新数组,flatMap会将整个数组作为单个元素保留;
    • 若元素不是数组,将其包装为一维数组后返回(兼容原输入外的边界情况)。

备选实现(reduce版本)

如果更习惯用reduce处理数组,也可以用以下方式:

const separateNestedArrays = function (arr) {
  return arr.reduce((result, element) => {
    if (Array.isArray(element)) {
      if (element.some(item => Array.isArray(item))) {
        // 展开嵌套数组,将子数组逐一推入结果
        result.push(...element);
      } else {
        // 直接推入原一维数组
        result.push(element);
      }
    } else {
      result.push([element]);
    }
    return result;
  }, []);
};

内容的提问来源于stack exchange,提问作者Borgher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:43:14