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

Chrome浏览器LocalStorage中扩展运算符(Triple dot notation)失效求助

解决LocalStorage中使用扩展运算符添加对象被覆盖的问题

嘿,我马上就发现你遇到的问题了——你现在的代码每次添加新收入数据时,都是直接覆盖掉原来的单个income对象,而不是把新数据追加进去!这是因为你用单个对象来存储收入条目,而不是用数组来管理多个条目。

问题根源拆解

你原来的逻辑里,当incomes存在时,执行incomes = { ...incomes, income: data }——这行代码的作用是把原incomes里的income字段直接替换成新的data对象,旧数据自然就丢失了,完全达不到“添加新对象”的效果。

修正后的代码

我们需要把存储收入条目的结构改成数组,这样就能轻松追加新数据了:

// 从LocalStorage读取数据,解析后如果为空则初始化含空数组的对象
let incomes = JSON.parse(localStorage.getItem("Incomes")) || { incomesList: [] };

// 构造新的收入数据对象(这里假设capital、name、price已经提前定义)
let data = { 
  capital: capital, 
  name: name, 
  price: price 
};

// 用扩展运算符生成新数组,追加新数据(也可以用push,但扩展运算符更符合immutable编程习惯)
incomes.incomesList = [...incomes.incomesList, data];

// 将更新后的数据存回LocalStorage
localStorage.setItem("Incomes", JSON.stringify(incomes));

额外兼容优化(可选)

如果你的LocalStorage里已经存有旧的单对象结构数据(比如之前存的是{ income: {...} }),可以加一段兼容逻辑,避免旧数据丢失:

// 兼容旧数据:如果原来的存储结构不是数组,就把单个对象转成数组
let incomes = JSON.parse(localStorage.getItem("Incomes"));
if (!incomes) {
  incomes = { incomesList: [] };
} else if (!Array.isArray(incomes.incomesList)) {
  // 把旧的单个income对象转成数组
  incomes.incomesList = incomes.income ? [incomes.income] : [];
  // 删除旧的单个income字段(可选)
  delete incomes.income;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:27:36