如何在本地存储中删除索引为2的数组?

时间:2016-12-10 18:32:07

标签: arrays local-storage

我的本​​地存储空间如下所示

{"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));

所以我还有一个问题。

  1. 如果我使用上面的postid = 1它可以工作,它会创建一个具有正确值的新本地存储。但是如果从我的表单中获取值,然后尝试将字符串转换为数字,它就会停止工作。 这不起作用,就像没有将字符串转换为数字一样?

    var postid = $$(this).attr(&#39; data-id&#39;); 帖子ID = parseInt函数(帖子ID)

    那为什么不将它转换为数字?

1 个答案:

答案 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);
    }
  }
}