2012-03-16 61 views
1

我使用LocalStorage將圖像列表(從圖庫)保存到設備。我已經解決了大部分問題 - 獲取數據,並填充HTML列表中的項目。簡單。HTML5 LocalStorage - 檢查重複值

我現在正在嘗試檢查正在保存的項目,檢查數據庫中的所有值,並且只在不重複時才添加它。當我建立這個時,我越來越深陷入一個漏洞,並處於需要一點幫助的地步。

這是我此刻的功能:

function storeFavourite(currentImage) { 
for (var i=0; i < localStorage.length; i++) { 
    item = localStorage.getItem('fav'+i); 
    if (item = currentImage) { 
     console.log('fav'+i+', '+currentImage+' in db already'); 
    } else { 
     next = localStorage.length; 
     localStorage.setItem('fav'+next, currentImage); 
     console.log('fav'+next+', '+currentImage); 
     updateFavouritesList(); 
    } 
} 
} 

這是一個很大的混亂,我已經徹底混淆自己。任何人都可以幫我弄明白嗎?

我根本不反對重新格式化數據結構,如果需要的話。目前密鑰爲fav0fav1等。

此處使用的updateFavouritesList()函數只是遍歷localStorage數據庫並創建<li>項目以添加到列表中。

回答

1

你必須在該行的錯誤:

if (item = currentImage) { 

你分配item。如果item不爲空/空/零/虛假,則它將始終以true解析。也許這應該是:

if (item == currentImage) { 

甚至:

if (item === currentImage) { 

取決於哪種類型的currentImage是。

編輯:在任何情況下,在此可以將你要尋找的一個功能:

function storeFavourite(item) { 
    for (var i in localStorage) { 
     if (localStorage[i] === item) return; 
    } 
    localStorage["fav" + localStorage.length] = item; 
} 
+0

我試圖分配不同的運營商,但它並沒有多大的差別(剛開始返回false而不是真實的,反之亦然)。 您的解決方案非常完美,謝謝。 – adnrw 2012-03-16 03:02:51

+0

沒問題。如果經營者沒有多大意義,值得更多地瞭解表達評估,「真理」和「虛假」。 「a = b」的計算結果爲「b」(因此爲什麼「a =(b = c)」會導致'a'被賦予'c'的值)。除此之外,如果'c'不是'null','undefined','0','false','NaN'或''''',當需要布爾值時它將被轉換爲'true'。 – Stoive 2012-03-16 03:48:57