Javascript push()替换元素,而不是追加
Javascript push() replacing element instead of appending
下面是我编写的一个函数,用于使用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))
}
相关文章:
- jQuery追加x元素的列表
- jquery追加元素位置始终为0
- 如何将动态追加元素的多个值存储到单个 var 中,然后检索到函数中
- 仅追加元素一次
- Masonry v3 在追加元素时是否仍然支持飞入过渡
- JQuery 复制/追加元素,删除了基本对象
- 追加元素,获取追加两次
- 追加元素AFTER加载
- 为什么在重新追加元素时单击事件不起作用
- jquery / 在达到最大追加数后自动删除追加元素
- D3只在元素不存在时追加元素
- 如何使用Jquery或Javascript瞄准追加元素,或者如何将追加元素添加到DOM中
- 在angular.js中通过作用域变量显示或追加元素
- 追加元素的最大数量
- 如何借助该事件处理程序创建的元素在事件处理程序之外动态追加元素?
- 如何多次追加元素(向下滑动)
- 使用$()追加元素的问题
- 如果有人在jquery或js中选择了一个特定的选项值,如何触发追加元素
- 当追加元素到
- 移除和追加元素后无法识别全局变量