0

jstorageで保存された配列内の単一のエントリを保存、ロード、または削除する3つの小さな関数を作成しました。

最初の 2 つの関数は完全に機能します。

ただし、単一のエントリを削除するものは、配列全体を体系的に削除するか、保存しません。

おそらく私のコードにある問題を誰かが教えてくれますか?

function local_single_delete(poi_id){
    if ($.jStorage.storageAvailable()== true) { // if local storage is available
        loctab = $.jStorage.get("poi_ids");     // load saved data
        if (loctab == null) {                   // if no saved data => null array
            loctab = new Array();   
            console.log('loctab is null');
        }
        for (local_i = 0; i < loctab.length; local_i++ ){       // for each saved data , looking for one one in particular
            if (loctab[local_i]['id_poi'] === poi_id) {         // if found
                loctab[local_i]= loctab[loctab.length-1];       // the one becomes the last entry value, 
                loctab.length =loctab.length -1;                // then we truncate the array for one position
                break;                                          // and we leave the for
            }
        }        
        $.jStorage.set("poi_ids",loctab);                       // write data 
        $.jStorage.flush();                                     // clear cache
    }
    else {
        console.log('on a pas de stockage local');
    }


}
4

1 に答える 1

0

解決

フラッシュするとすべてのデータが削除されます...だから、そうしないでください! 宣言されていないi変数もありました。

function local_single_delete(poi_id){
  if ($.jStorage.storageAvailable() === true) { 
    loctab = $.jStorage.get("poi_ids"); 
    if (loctab === null) {   
      loctab = [];   
      console.log('loctab is null');
    }
    for (local_i = 0; local_i < loctab.length; local_i++ ){
      if (loctab[local_i].id_poi === poi_id) {    
        loctab[local_i]= loctab[loctab.length-1];  
        loctab.length =loctab.length - 1;
        break;                            
      }
    }        
    $.jStorage.set("poi_ids",loctab);         
  }
  else {
    console.log('on a pas de stockage local');
  }
}
于 2014-05-27T14:35:52.350 に答える