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

如何从多维数组中仅提取第二层级数组的元素

提取多维数组中第二层级的非数组元素

没问题,我来帮你搞定这个需求!你的核心目标是只取原数组直接包含的子数组里的非数组元素,原代码只是把整个第二层级的数组打印出来,没有过滤掉其中嵌套的更深层数组,所以才会出现不符合预期的结果。

方法一:传统循环实现

这是最直观的写法,步骤清晰:

  1. 遍历原数组,找到所有直接的子数组(也就是第二层级的容器)
  2. 遍历每个子数组,只把不是数组的元素收集到结果数组中
var myArr = [1, 2, 3, [10, 11,[1321,3213,[321321, true], "ha"], 133], 4, 5];
var mySecondArr = [];

for (let i = 0; i < myArr.length; i++) {
  // 用Array.isArray判断是否为数组,比typeof更准确(typeof数组会返回'object')
  if (Array.isArray(myArr[i])) {
    // 遍历第二层级数组的每个元素
    for (let j = 0; j < myArr[i].length; j++) {
      // 只收集非数组元素,排除深层嵌套的数组
      if (!Array.isArray(myArr[i][j])) {
        mySecondArr.push(myArr[i][j]);
      }
    }
  }
}

console.log(mySecondArr); // 输出: [10, 11, 133]

方法二:数组API简化实现

如果喜欢更简洁的写法,可以用reduce结合filter来完成,逻辑和上面一致,但代码更紧凑:

var myArr = [1, 2, 3, [10, 11,[1321,3213,[321321, true], "ha"], 133], 4, 5];

var mySecondArr = myArr.reduce((result, currentItem) => {
  // 遇到直接子数组时,过滤出其中的非数组元素,添加到结果里
  if (Array.isArray(currentItem)) {
    result.push(...currentItem.filter(item => !Array.isArray(item)));
  }
  return result;
}, []);

console.log(mySecondArr); // 输出: [10, 11, 133]

关键注意点

  • 不要用typeof判断数组:typeof []会返回'object',无法区分数组和普通对象,Array.isArray()是专门判断数组的可靠方法。
  • 明确层级:我们只处理原数组的直接子数组,对于子数组里的嵌套数组直接跳过,只保留其中的基础类型元素(数字、字符串、布尔值等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:56:25