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

编写返回数组所有组合的递归函数时报读取undefined属性的类型错误,求原因

错误原因及修复方案

报错根本原因

你遇到的类型错误是递归调用参数传递错误导致的:

  • 你定义的recurse函数要求传入两个参数prefix和arr,但你在递归调用时只传了第一个参数,第二个待处理数组参数缺省会被识别为undefined,下层递归执行arr.length时自然就抛出了「Cannot read properties of undefined (reading 'length')」的报错。
  • 同时你把本该作为第二个参数传递的剩余切片数组arr.slice(i+1)直接拼接进了prefix,也会导致前缀数组结构不符合预期。

修正后代码

function getAllCombos(arr) {
  let results = [];
  function recurse(prefix, remainingArr) { 
    for (let i = 0; i < remainingArr.length; i++) { 
      const newPrefix = [...prefix, remainingArr[i]];
      results.push(newPrefix);
      // 正确传递两个参数:新前缀、当前索引后的剩余数组
      recurse(newPrefix, remainingArr.slice(i + 1));
    }
  }
  recurse([], arr);
  // 补充空数组,匹配测试用例预期输出
  results.push([]);
  // 若需要和你给出的输出顺序完全一致,可打开下面的排序代码
  // results.sort((a, b) => b.length - a.length || a.join().localeCompare(b.join()));
  return results;
}

验证结果

运行你给出的测试用例:

console.log(getAllCombos(['a', 'b'])); 
// 开启排序后输出完全匹配预期:[['a','b'], ['a'], ['b'], []]
console.log(getAllCombos(['a', 'b', 'c']));
// 输出包含所有预期的8种组合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:27:04