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

函数式编程中基于绝对索引合并列表的优化实现问询

函数式风格合并Map与列表并避免重复索引计算

简洁实现方案

利用Array.reduce维护累计索引,一次性完成遍历与索引计算,避免重复操作:

const myDictionary = new Map([
  ['a', 4],
  ['b', 0],
  ['c', 3]
]);

const myList = ['a', 'b', 'c'];

const result = myList.reduce(({ currentIndex, output }, key) => {
  const count = myDictionary.get(key) || 0;
  // 生成当前key对应的所有项
  const items = Array.from({ length: count }, (_, i) => ({
    index: currentIndex + i,
    payload: `${key}${i}`
  }));
  // 更新累加器:索引偏移累加,结果数组追加当前项列表
  return {
    currentIndex: currentIndex + count,
    output: [...output, items]
  };
}, { currentIndex: 0, output: [] }).output;

console.log(result);
// 输出与expectedResult完全一致

方案优势

  1. 无重复计算:通过reduce的累加器currentIndex追踪全局索引偏移,每个元素仅计算一次前置索引总和,避免了重复遍历前面元素求和的性能问题。
  2. 纯函数式风格:全程无可变变量,所有操作均为不可变更新(返回新对象/数组),符合函数式编程的无副作用、纯操作要求。
  3. 直观高效:一次遍历完成所有逻辑,代码简洁且逻辑清晰,无需额外依赖。

对比传统问题点

如果之前的函数式实现是通过myList.slice(0, idx).reduce(...)来计算每个元素的前置索引总和,会导致每个元素都要重新遍历前面的所有元素,时间复杂度为O(n²)。而本方案的时间复杂度为O(n + m)(n是myList长度,m是所有count的总和),效率大幅提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:26:00