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

如何遍历对象数组所有值,实现quantidade与对应tecnologia值的乘积计算

代码调整方案

核心调整逻辑

  • 移除原代码中不安全且难维护的eval实现,改用递归深度优先遍历处理任意层级的filhos嵌套结构
  • 遍历过程中主动传递父节点的tecnologia对象,无需额外做路径拼接反向查找父节点
  • 预存根节点首个对象的A值,匹配需求中「tecnologia字段含A键则与第一个对象的A值相乘」的规则

完整实现代码

function calcula (tabela, arvore) {
    const resultadoCalculado = []
    // 预存根节点第一个对象的A值备用,兜底默认值1可按需修改
    const rootValorA = arvore[0]?.tecnologia?.A ?? 1

    // 递归遍历函数:入参为当前节点、父节点的tecnologia对象
    function traverse(node, parentTecnologia) {
        // 处理当前节点的quantidade计算
        if (typeof node.quantidade === 'number' && parentTecnologia) {
            const multiplicador = 'A' in parentTecnologia 
                ? rootValorA 
                : Object.values(parentTecnologia)[0] // 非A场景取tecnologia第一个值,可按需扩展规则
            resultadoCalculado.push(node.quantidade * multiplicador)
            // 如需把计算结果写回原节点,可加:node.valorCalculado = node.quantidade * multiplicador
        }
        // 递归处理子节点
        if (Array.isArray(node.filhos)) {
            node.filhos.forEach(filho => {
                // 把当前节点的tecnologia作为子节点的父级tecnologia传递
                traverse(filho, node.tecnologia || parentTecnologia)
            })
        }
    }

    // 遍历所有根节点启动递归
    arvore.forEach(rootNode => {
        traverse(rootNode, rootNode.tecnologia)
    })

    return resultadoCalculado
}

用法说明

  • 函数返回值为所有quantidade计算后的结果数组
  • 非A场景的乘法规则可根据实际需求修改multiplicador的赋值逻辑
  • 如果输入的arvore结构有特殊规则,可对应调整递归的判断条件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:15:07