過去の検索をローカル ストレージに追加しようとしており、それを配列で実行しています。問題は、関数の呼び出しが 1 回だけであっても、値が 2 回追加されることです。新しい個別の検索ごとに、配列とストレージに追加したいのですが、5 つ以上ある場合は、最後の項目がポップされます。
検索が処理されるときに呼び出されます。
SetLocalStorageItem(searchString[1]);
それを行うべき機能:
function SetLocalStorageItem(search) {
if(search === '') {
return;
}
console.log(localStorage);
// Check if the browser support Local Storage
if(localStorage) {
if(localStorage["pastSearches"]) {
pastSearches.push(JSON.parse(localStorage["pastSearches"]));
}
// Check if the value exists in the array,
// returns -1 if the array does not contain the value
if($.inArray(search, pastSearches) == -1) {
// If not, put it first and...
pastSearches.unshift(search);
// ...pop one at the end if array is too big
if(pastSearches.length > 5) {
pastSearches.pop();
}
pastSearches.push(search);
// Adding the search to the storage
localStorage["pastSearches"] = JSON.stringify(pastSearches);
DisplayPastSearches();
}
}
}
クリアして表示する関数:
function ClearSearches() {
// If there is any past searches
localStorage.clear();
pastSearches = [];
}
function DisplayPastSearches() {
if(pastSearches.length) {
$("<div>" + pastSearches + "</div>").appendTo(".container");
}
}
ここで、配列の検索をクリアし、ストレージが空である場合、コードを実行して「billy」を検索すると、上記の console.log で次のプロンプトが表示されます。
Storage
length: 1
pastSearches: "["billy","billy"]"
__proto__: Storage