2012-03-16 4 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(); 
    } 
} 
} 

Это большой беспорядок, и я полностью путать себя. Может ли кто-нибудь помочь мне понять это?

Я вовсе не против переформатировать структуру данных, если это необходимо. На данный момент клавиши fav0, fav1 и так далее.

Функция updateFavouritesList(), используемая там, просто выполняет итерацию по базе данных localStorage и создает из нее <li> элементов для добавления в список.

ответ

1

У вас ошибка в строке:

if (item = currentImage) { 

Вы назначая item. Если item не имеет значения null/empty/zero/falsy, то он всегда будет разрешен как true. Может быть, это должно быть:

if (item == currentImage) { 

или даже:

if (item === currentImage) { 

в зависимости от того, какой тип currentImage есть.

EDIT: В любом случае, здесь есть функция, которая будет делать то, что вы ищете:

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

Я попытался назначить различных операторов, но это не делает большой разницы (только начали возвращать ложь вместо истины и наоборот). Ваше решение отлично работает, спасибо. – adnrw

+0

Нет проблем. Если операторы не имеют большого смысла, стоит больше узнать об оценке выражений, «правдивости» и «ложности». 'a = b' оценивает любое значение' b' (следовательно, почему 'a = (b = c)' приведет к тому, что 'a' будет присвоено значение' c'). К тому же, если 'c' не' null', 'undefined',' 0', 'false',' NaN' или '' '', он будет преобразован в 'true', когда требуется логическое значение. – Stoive

Смежные вопросы