You need to enable JavaScript to run this app. 如何对数组指定索引原有值求和后使用splice方法替换,适配Chart.js月度统计场景
优惠活动
大模型
产品
解决方案
定价
更多

如何对数组指定索引原有值求和后使用splice方法替换,适配Chart.js月度统计场景

问题修复方案

问题根因

  • 索引错位:monthInNumber是1~12的月份数值,你取值时用result[j]取和月份数值相同的索引,但赋值时用splice(j-1, 1, xxx)放到前一位索引,导致每次取值都是未更新的初始值,无法实现累加
  • 数组初始化长度错误:12个月份需要对应12个数组元素,你初始化的result只有11个'0',12月对应索引会越界
  • 内层循环冗余:j从0到12的循环没有实际作用,直接通过月份计算索引即可
  • 变量未声明:totalAmount没有用let/const声明,存在全局变量污染风险

修复后完整代码

// 初始化12个元素对应12个月份
var result = ['0','0','0','0','0','0','0','0','0','0','0','0'];
const allMonth = ["Jan", "Feb", "Mar", 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

$(document).ready(function(){
    $.ajax({
        type: 'GET',
        url: "/sales-overview/",
        success: function(data) {
            for( var i = 0; i< data.length; i++) {
                let transactionMonth = data[i].createdAt
                // 把月份字符串转成数字,得到1~12的数值
                let monthInNumber = Number(transactionMonth.slice(5, 7))
                // 直接计算对应数组索引,1月对应索引0,12月对应索引11
                let arrIndex = monthInNumber - 1
                // 累加计算,取值和赋值使用同一个索引
                let totalAmount = Number(result[arrIndex]) + Number(data[i].cartTotal);
                // 替换对应位置的值,保持字符串类型和初始值保持一致
                result.splice(arrIndex, 1, totalAmount.toString());
            }
            // 此处可插入Chart.js渲染逻辑
        },
        error: function(err) {
            console.log(err)
        }
    })
})

改动说明

  • 调整result数组初始长度为12,覆盖全年12个月的索引范围
  • 删除冗余的内层j循环,直接通过月份数值计算对应数组索引,彻底避免索引错位问题
  • 取值和赋值使用同一个索引,保证每次累加的是上一次更新后的值,解决无法累加的问题
  • 补充变量声明,避免全局污染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 16:36:06