我的本地存储空间如下所示
{"data":[[0,"Post1","Text1","2016-12-16T11:01:00.000Z"],[1,"Post2","Text2","2016-12-20T14:00:00.000Z"]],[3,"Post3","Text3","2016-12-25T13:00:00.000Z"]]}
如何只删除数组中的一个项目?
我试过这个,其中postid是我要删除的数组索引。
var postid = 1
var info = JSON.parse(localStorage.getItem("rp_data"));
var obj = [];
for(var i = 0; i < info.data.length; i++){
var data = info.data[i];
if(data === postid){
info.splice(i, 1);
}
}
localStorage.setItem("rp_data", JSON.stringify(data));
所以if部分错了我猜!? 感谢任何投入,谢谢。
UPDATE 所以我可以删除数组中的一个帖子,其中数组中的第一项等于我的postid,所以如果postid = 1,它将删除数组中的第二个帖子。
//var postid = $$(this).attr('data-id');
//postid=parseInt(postid)
postid=1
var info = JSON.parse(localStorage.getItem("rp_data"));
//remove object
for(var i = 0; i < info.data.length; i++){
var data = info.data[i][1];
myApp.alert(data);
if(i === postid){
myApp.alert(i);
info.data.splice(i, 1);
}
}
localStorage.removeItem("rp_data");
localStorage.setItem("rp_data", JSON.stringify(info));
所以我还有一个问题。
如果我使用上面的postid = 1它可以工作,它会创建一个具有正确值的新本地存储。但是如果从我的表单中获取值,然后尝试将字符串转换为数字,它就会停止工作。 这不起作用,就像没有将字符串转换为数字一样?
var postid = $$(this).attr(&#39; data-id&#39;); 帖子ID = parseInt函数(帖子ID)
那为什么不将它转换为数字?
答案 0 :(得分:0)
由于数组中的项是JSON对象,因此无法将该对象与postid进行比较。你应该使用indexOf。您也不想拼接索引。在这种情况下,这应该是对象或项目。如果要删除对象中的项,则还必须遍历该对象。所以这将是一个嵌套循环。
//remove object
for(var i = 0; i < info.data.length; i++){
var data = info.data[i];
if(i === postid){
info.data.splice(data, 1);
}
}
//remove item in object
for(var i = 0; i < info.data.length; i++){
if(i == postid){
for(var j = 0; j < info.data[i].length; j++){
var item = info.data[i][j];
info.data[i].splice(item,1);
}
}
}