Сохраняю в localstorage массив:
var myLikes = [];
myLikes[0] = {'slide':slide_id}
localStorage.setItem("myCollection", JSON.stringify(myLikes));
Далее мне нужно проверить является ли новое значение уникальным и если нет - добавить его в массив myCollection. Пытаюсь сделать это так:
var slide_id = $$('#likes').attr('slide_id');
var arrayLikes = JSON.parse(localStorage.getItem('myCollection'));
for (var i = 0; i < arrayLikes.length; i++) {
if (slide_id == arrayLikes[i].slide) { // dublicate
console.log('Dublicate');
} else {
console.log('New' + arrayLikes[i].slide);
arrayLikes.push({'slide':slide_id});
localStorage.setItem("myCollection", JSON.stringify(arrayLikes));
}
}
В итоге проверка не работает и в localstorage добавляются все значения, в том числе дубликаты + массив начинает увеличиваться в геометрической прогрессии.
Что я делаю не так и как мне правильно выполнить проверку?
var slide_id = $('#likes').attr('slide_id');
var arrayLikes = JSON.parse(localStorage.getItem('myCollection'));
var found = false;
for (var i = 0; i < arrayLikes.length; i++) {
if (slide_id == arrayLikes[i].slide) { // dublicate
found = true;
break;
}
}
if (found) {
console.log('Dublicate');
} else {
console.log('New' + arrayLikes[i].slide);
arrayLikes.push({
'slide': slide_id
});
localStorage.setItem("myCollection", JSON.stringify(arrayLikes));
}
Объектный подход весьма сильно упростил бы эту задачу.
Например, можно унаследовать от Array
:
class MyLikes extends Array {
constructor(storageKey) {
super();
Object.assign(this, JSON.parse(localStorage.getItem(storageKey) || '[]'));
}
findLikeIdx(likeObj) { return this.findIndex(o => o.slide == likeObj.slide); }
addLike(likeObj) {
const idx = this.findLikeIdx(likeObj);
return (idx >= 0) ? idx : this.push(likeObj) - 1;
}
store(storageKey) { localStorage.setItem(storageKey, JSON.stringify(this)); }
}
const stKey = 'myCollection',
const likes = new MyLikes(stKey); // создание экземпляра объекта и чтение данных из localStorage
/* ... */
likes.addLike({ slide: slide_id }); // добавление без дубликатов
/* ... */
likes.store(stKey); // запись в localStorage
Виртуальный выделенный сервер (VDS) становится отличным выбором