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

JavaScript对象列表criteriaScore全部与最后一项一致问题求助

问题根因
  • 你定义的criteriaList是全局的对象数组,JS中对象是引用类型,你在calcLocScore方法中直接修改了criteriaList里原对象的score属性,同时把原对象直接push到了当前地点的criteriaScore数组中。
  • 所有地点的criteriaScore数组里存储的都是指向criteriaList中原对象的引用,每次调用calcLocScore都会覆盖这些对象的score值,最后一次调用(也就是给Location 3打分的调用)的修改结果会被所有引用指向的对象同步,所以你会看到所有地点的评分标准得分都和最后一个地点一致。
  • 而totalScore是数字类型(值类型),每次计算的结果是直接存储的独立数值,不会被后续修改影响,所以计算结果是正确的。
修复方案

每次处理评分标准时,先拷贝原始的评分标准对象,在新对象上添加得分,不要修改全局的原始评分标准数据:

const calcLocScore = () => {
  let locScore = {
    totalScore: 0,
    criteriaScore: [] // 每次初始化空数组存储当前地点的独立评分
  }
  criteriaList.forEach(criteria => {
    // 浅拷贝原始criteria对象,避免修改全局对象和引用共享问题
    const currCriteria = { ...criteria };
    currCriteria.score =  Math.floor(Math.random() * 50);
    locScore.totalScore += currCriteria.score;
    locScore.criteriaScore.push(currCriteria);
  });
    
  return locScore;
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:36:02