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

Vue3中为何得到null数组而非0数组?计算属性问题咨询

问题分析与修复

核心错误:computed计算属性返回的是ref响应式对象,不能直接用数组下标[k]访问元素,必须通过.value获取计算后的实际数组。

错误原理

salesTotal和cogsTotal是computed创建的响应式对象,并非原生数组。直接写salesTotal[k]是在访问这个ref对象的第k个属性(而非数组元素),结果为undefined,两个undefined相加后最终得到null(Vue响应式包装的表现)。

修正后的代码

const salesTotal = computed(() => {
  let totalSalesAmount = new Array(numberOfPeriods).fill(0);
  return totalSalesAmount;
});

const cogsTotal = computed(() => {
  let totalCOGSAmount = new Array(numberOfPeriods).fill(0);
  return totalCOGSAmount;
});

const grossMarginTotal = computed(() => {
  // 先通过.value获取计算后的原生数组
  const salesArr = salesTotal.value;
  const cogsArr = cogsTotal.value;
  let grossMarginAmount = [];
  for (let k = 0; k < numberOfPeriods; k++) {
    grossMarginAmount[k] = salesArr[k] + cogsArr[k];
  }
  return grossMarginAmount;
});

也可以用更简洁的数组映射写法:

const grossMarginTotal = computed(() => {
  return salesTotal.value.map((sale, idx) => sale + cogsTotal.value[idx]);
});

修改后,grossMarginTotal会正确返回[0, 0, 0, 0, 0]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:22:22