ユーザー エントリを保存するためにローカル ストレージを使用しており、そのエントリを別のページに表示しています。最新の編集日時に基づいて並べ替える方法が必要です。HTML5でこれを行う方法はありますか。そうでない場合、最も簡単で効果的な方法は何ですか?
入力していただきありがとうございます。
ユーザー エントリを保存するためにローカル ストレージを使用しており、そのエントリを別のページに表示しています。最新の編集日時に基づいて並べ替える方法が必要です。HTML5でこれを行う方法はありますか。そうでない場合、最も簡単で効果的な方法は何ですか?
入力していただきありがとうございます。
キー/値に固有の順序 (アルファベット順、数字順など) がある場合、それらにタイムスタンプを入れるのは不要な場合があります。Storage オブジェクトには並べ替えメソッドがありませんが、新しい Array() を作成して並べ替えることができます。
function SortLocalStorage(){
if(localStorage.length > 0){
var localStorageArray = new Array();
for (i=0;i<localStorage.length;i++){
localStorageArray[i] = localStorage.key(i)+localStorage.getItem(localStorage.key(i));
}
}
var sortedArray = localStorageArray.sort();
return sortedArray;
}
これの欠点は、配列が連想的でないことですが、これは JavaScript Array オブジェクトの性質によるものです。上記の関数は、キー名を値に埋め込むことでこれを解決します。このようにして、まだそこにあり、ソートされた配列を表示するために使用する関数は、値からキーを分離するフットワークを実行できます。
何らかの方法でタイムスタンプと保存された値をペアにする必要があります。値ごとにラッパー オブジェクトを作成し、値とタイムスタンプを 1 つのオブジェクトに保存できます。myvalue
参照で保存したい値があると仮定しますmyref
:
var d=new Date();
var storageObject = {};
storageObject.value = myvalue;
storageObject.timestamp = d.getTime();
localStorage.setItem(myref, JSON.stringify(storageObject));
もう一方のページでは、オブジェクトを配列に再水和し、compareFunction関数を実装する必要があります。
もう 1 つのオプションは、この種の多面的な情報をより自然に保存およびクエリできるようにするWeb SQL データベースとインデックス付きデータベース APIを使用することですが、ブラウザ間で簡単に機能させるには、おそらくある種の抽象ラッパーを作成する必要があります。