Javascript push()替换元素,而不是追加

Javascript push() replacing element instead of appending

本文关键字:追加 元素 push 替换 Javascript      更新时间:2023-09-26

下面是我编写的一个函数,用于使用Javascript向local storage添加单词。如果你想知道,这是我为一个简单的字典查找网站构建搜索历史功能的尝试。

function add2local(entry){
    var l = localStorage.length;
if(l==0){
    var lu = [entry];
    localStorage.setItem("w", JSON.stringify(lu));
}
else {
    var lu = JSON.parse(localStorage.getItem("w")); alert(lu);
    lu.push(entry); alert(lu);
}}

我的理解是,这个函数每次被调用时都会将其参数附加到本地存储中。所以,当我第一次叫它时,我会给它发一个词海盗。它会按预期添加到阵列中,然后添加到本地存储中。第一个alert()(alert()函数仅用于测试)证实了这一点。第二次,我用"吸血鬼"这个词来称呼它。现在,根据函数的逻辑,吸血鬼应该被附加到数组中,因此第二个alert()应该输出"海盗,吸血鬼"。

但第三次,比如说,我用单词foo调用函数。这一次,它应该输出"海盗,吸血鬼,foo",但显示的是"海盗,foo"。每个后续调用都只是用新单词替换第二个单词,而不是附加它。我可能做错了什么?我是不是误解了push()的工作原理?

if条件和逻辑不正确;localStorage有多少项并不重要,但重新保存修改后的数组非常重要。

无论如何,我怀疑这是一个impl。可能看起来是这样的:

function add2local(entry){
    // load entries - if there are none, we simulate an empty array to load
    var lu = JSON.parse(localStorage.getItem("w") || "[]");
    // add new entry
    lu.push(entry);
    // write back - so change is not lost between function calls
    localStorage.setItem("w", JSON.stringify(lu));
    // return all local entries saved - for use from the caller
    return lu;
}

为什么要检查存储长度?你不在乎。获取键,如果它为null,则默认为空数组。

function add2local (entry) {
  var key = "w"
  var value = localStorage.getItem(key)
  if (value) {
    value = JSON.parse(value)
  } else {
    value = []
  }
  value.push(entry)
  localStorage.setItem(key, JSON.stringify(value))
}