【问题标题】:How to stop local storage overwriting如何停止本地存储覆盖
【发布时间】:2020-07-16 16:13:36
【问题描述】:

我不太了解本地存储,所以我希望我能正确解释这一点。在没有进入我的程序上下文的情况下,我基本上希望每次运行程序时都设置两个键值,“teamname”和“totalpoints”,但是每次运行程序时,这些值都会被覆盖到最近一次他们被设置了。我在某个地方看到我需要合并一个数组来解决这个问题,但是我真的不知道该怎么做。

function store()
{
localStorage.setItem("key value",[teamname, totalpoints]);
document.write(localStorage.getItem("key value"));
}

【问题讨论】:

  • 嗨,Noah,为了让我提供帮助,我需要更多地了解您的程序。特别是,您是如何创建 teamname 和 totalpoints 变量的?
  • 这能回答你的问题吗? Storing Objects in HTML5 localStorage
  • "但是每次程序运行时,这些值都会被覆盖到上次设置的时间" - 这就是setItem 所做的。如果它已经存在,请不要覆盖该值。 “我在某个地方看到我需要合并一个数组来解决这个问题” - 不,这是完全错误的。无论如何,您只能将字符串存储在本地存储中。
  • @ZacharyHaber 好吧,这个程序几乎就像一个运动模拟游戏,在程序结束时,我想创建一个所有玩过游戏的用户的排行榜,按总分排名,并且团队名称仅用作每个用户的身份。显然,当每次程序运行时这些都被覆盖时,我不能这样做。我想要发生的是让排行榜随着每个玩游戏的用户而不断增长。我猜你的意思是如何“创建”变量是全局声明的。
  • @ZacharyHaber ^^^

标签: javascript local-storage overwrite


【解决方案1】:

如果我理解您的问题,您只需要某种方式来检查用户的状态,如果他们已经访问过,请不要覆盖他们的团队名称或分数:

let teamname
let totalpoints

if(localStorage.getItem("visited") !== "true"){
   teamname = /* your code here */
   totalpoints = /* your code here */

   localStorage.setItem("teamname", teamname)
   localStorage.setItem("totalpoints", totalpoints)
   localStorage.setItem("visited", true)
}else{
   /* do something else */
}

【讨论】:

  • 现在这总是覆盖visitedgetItem 将返回一个字符串,而不是布尔值。
  • @Bergi 将 setItem("visited") 移动到 if 语句内部,并更改为字符串
  • 啊,移动语句很有意义。
【解决方案2】:

当您第一次创建变量teamnametotalpoints 时,然后从本地存储中拉取它们。

let [ teamname = 'defaultName', totalpoints = 0 ] = JSON.parse( localStorage.getItem('teamKey') || '[]');

那么当你存储值时:

function store()
{
   localStorage.setItem( "teamKey", JSON.stringify( [ teamname, totalpoints ] ));
  document.write(localStorage.getItem("key value"));
}

在输入和从 localStorage 获取值时,您需要进行字符串化/解析,因为它变成了字符串,这样您就可以取回您放置的对象。

编辑:我觉得我们都误解了你的要求:

为了在每次存储时附加到数组,您需要将排行榜作为对象数组,其中对象为 {teamName:string,totalPoints:number}。然后每次存储行时添加到数组中。您还可以检查是否要查看是否有团队已经在排行榜中,并根据您是否再次添加他们。

let leaderBoard = JSON.parse( localStorage.getItem('leaderBoard') || '[]');

那么当你存储值时:

function store(teamName,totalPoints)
{
   localStorage.setItem( "leaderBoard", JSON.stringify( [...leaderBoard,{teamName,totalPoints} ));
  // depending on what you want to afterwards, you probably need to update leaderBoard variable to the latest as well.
  leaderBoard = JSON.parse(localStorage.getItem("leaderBoard"));
  document.write(localStorage.getItem("leaderBoard"));
}

在输入和从 localStorage 获取值时,您需要进行字符串化/解析,因为它变成了字符串,这样您就可以取回您放置的对象。

【讨论】:

  • 同样的问题。键不断被覆盖为最近分配的值。
  • @NoahCGC 你觉得这个怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
相关资源
最近更新 更多