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

如何在JavaScript中实现Groovy的列表列表指定索引求和功能

在JavaScript中实现Groovy列表列表求和逻辑

核心逻辑对应实现

Groovy代码value.collect { it.get(0) }*.toInteger().sum()的作用是:遍历嵌套列表,提取每个子列表第0位元素,转为整数后求和。在JavaScript中可以通过map+reduce组合实现完全等价的功能:

处理单个嵌套列表(对应Groovy中的value)

如果你的目标是处理单个列表列表(比如Groovy里的value变量),代码如下:

// 示例嵌套列表
const nestedList = [['12'], ['34'], ['56']];

// 提取第0位元素、转整数、求和
const total = nestedList
  .map(item => Number(item[0])) // 对应collect取索引0 + *.toInteger()
  .reduce((accumulator, current) => accumulator + current, 0); // 对应sum()

console.log(total); // 输出:102

处理值为嵌套列表的Map

如果要遍历整个Map的所有值(每个值都是嵌套列表)并分别求和,或者汇总所有值的总和,可以这样做:

// 示例Map,值为列表列表
const dataMap = {
  listA: [['10'], ['20']],
  listB: [['30'], ['40'], ['50']]
};

// 方式1:获取每个Map值的单独求和结果
const groupTotals = Object.fromEntries(
  Object.entries(dataMap).map(([key, nestedList]) => {
    const sum = nestedList
      .map(item => parseInt(item[0], 10)) // 用parseInt转整数,需指定基数10
      .reduce((acc, curr) => acc + curr, 0);
    return [key, sum];
  })
);
console.log(groupTotals); // 输出:{ listA: 30, listB: 120 }

// 方式2:汇总所有Map值的总和
const totalAll = Object.values(dataMap)
  .flat() // 先把所有嵌套列表合并成一维列表
  .map(item => +item[0]) // 用+号快速转整数
  .reduce((acc, curr) => acc + curr, 0);
console.log(totalAll); // 输出:150

细节说明

  • 转整数的三种常用方式:Number(item[0])、parseInt(item[0], 10)、+item[0],效果一致,可根据习惯选择。
  • reduce方法必须指定初始值0,避免空列表时返回undefined。
  • 如果子列表可能为空,建议加判断:map(item => item[0] ? Number(item[0]) : 0),防止转整数时出现NaN。

内容的提问来源于stack exchange,提问作者Eric C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:33:28