Сохраняю в 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
-
13:29
Кофе для программистов: как напиток влияет на продуктивность кодеров?
-
22:13
Рекламные вывески: как привлечь внимание и увеличить продажи
-
19:13
-
16:04
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
-
17:27
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
-
22:17
-
18:08
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
-
18:54
-
17:35
ТОП-10
-
Почему SERVER_ADDR имеет не тот IP 47907 visits
-
Как заменить $_SERVER[REMOTE_ADDR] на IP клиента в PHP за двумя Nginx? 30567 visits
-
Хочу вывести несколько строк из массива в один div, выводит только много undefined; подскажите, что делать? 23895 visits
-
Как через css изменить цвет png изображения? 10398 visits
-
Blob video url download 10004 visits
-
Php curl запрос через прокси с авторизацией 9276 visits
-
Работа с captcha vk api 8147 visits
READ ALSO