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

时间:2015-12-13 00:47:58

标签: javascript arrays local-storage

这是我编写的一个函数,用于使用Javascript向-endGame添加单词。如果您想知道,这是我尝试为简单的字典查找网站构建搜索记录功能。

local storage

我的理解是这个函数会在每次调用时将其参数附加到本地存储。所以,我第一次打电话给它时,我发送了 pirate 这个词。这会被添加到阵列中,然后按预期添加到本地存储。第一个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()应该输出" pirate, 。吸血鬼#&34;它确实如此。

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

2 个答案:

答案 0 :(得分:2)

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

无论如何,我怀疑是一个冲动。可能看起来如此:

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;
}

答案 1 :(得分:2)

为什么检查存储长度?你不在乎。获取密钥,如果它为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))
}