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

JavaScript/TypeScript如何实现无突变递归从嵌套对象构建ID数组

无突变递归实现方案

调整后完全消除了数组可变操作,全程返回新数组,符合函数式无突变原则,完整代码如下:

interface SubscriptionParams {
  selectedProduct?: SubscriptionSelectedProduct;
}

interface SubscriptionSelectedProduct {
  productId?: string;
  pricingId?: string;
  childProduct?: SubscriptionSelectedProduct;
}

// 递归收集当前节点及所有子节点的产品ID,返回全新数组,无任何入参修改
function collectProductIds(product?: SubscriptionSelectedProduct): string[] {
  // 节点不存在/无产品ID时直接返回空数组
  if (!product?.productId) return [];
  // 拼接当前ID和子节点返回的ID数组,每次都是生成新数组,无突变
  return [product.productId, ...collectProductIds(product.childProduct)];
}

function subscriptionProductsIds(subscription: SubscriptionParams): string[] {
  return collectProductIds(subscription.selectedProduct);
}

改动说明

  • 移除了原有接收可变数组参数的递归逻辑,改为让递归函数自身返回对应层级的ID数组
  • 全程使用数组展开运算符合并结果,没有push等修改原数组的操作,不会修改任何入参
  • 去掉了冗余的非空断言逻辑,容错性更高,如果你的业务场景确定productId一定存在,可以自行加回非空断言!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:54:03