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

不使用内置数组方法重写.concat方法 解决返回二维数组问题

问题原因

你当前的实现只是把所有传入参数直接收集为新数组返回,当参数本身是数组类型时,会直接把整个数组作为新数组的单个元素存入,自然就会出现嵌套结构,不符合concat方法拉平首层数组参数的要求。

修正方案

实现逻辑要对每个传入参数做判断:如果是数组就遍历它的内部元素逐个存入结果,非数组类型直接存入结果即可。全程仅用索引赋值和基础循环,没有调用任何数组实例的内置方法,符合编程挑战的要求。
如果规则限制不允许使用Array.isArray,可以把数组判断逻辑替换为Object.prototype.toString.call(currentItem) === '[object Array]',效果完全一致。

function newConcat(...items) {
  const result = [];
  let writeIndex = 0;
  // 遍历所有传入参数
  for (let i = 0; i < items.length; i++) {
    const currentItem = items[i];
    // 判断当前参数是否为数组
    if (Array.isArray(currentItem)) {
      // 数组类型则遍历内部元素逐个写入结果
      for (let j = 0; j < currentItem.length; j++) {
        result[writeIndex] = currentItem[j];
        writeIndex++;
      }
    } else {
      // 非数组类型直接写入结果
      result[writeIndex] = currentItem;
      writeIndex++;
    }
  }
  return result;
}

验证示例

// 测试用例
console.log(newConcat(1, 2, [3, 4], 5, [6, [7, 8]]));
// 输出:[1, 2, 3, 4, 5, 6, [7, 8]] 符合原生concat的首层展开逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:45:02