Добавляете данные в существующее локальное хранилище? JavaScript

avatar
The Fat Fish
7 апреля 2018 в 23:38
790
2
0

Я писал код, добавляющий элемент в локальный массив хранения, но столкнулся с проблемой, когда массив не обновляется. Поскольку localStorage не поддерживает массивы, я преобразовывал их в строку.

function addItem(add_item) {

    if (localStorage.getItem("list_items") === null) {
        localStorage.setItem("list_items", "");
    }
    else {
        "Something has gone horribly wrong!"
    }

    // Check if item is already added
    if(existingEntries == null) existingEntries = [];
    else {
        existingEntries = JSON.parse(localStorage.getItem("list_items"));
    }

    // Set entry to the currently selected item
    var entry = add_item;

    // Check if item is in string
    var exists = existingEntries.includes(entry);

    // Add item if it's not already in the array
    if (exists == false) {
        existingEntries.push(entry);
        localStorage.setItem("list_items", JSON.stringify(existingEntries));
    }
}

По какой-то причине локальное хранилище не обновляется с добавлением нового значения. Есть идеи, почему? Заранее спасибо.

Источник
Jorg
7 апреля 2018 в 23:44
0

Вы это запустили? В вашей консоли есть несколько ошибок.

charlietfl
7 апреля 2018 в 23:50
0

@DamienGold, который перезапишет то, что уже есть, и не позволит хранить массив

Ответы (2)

avatar
charlietfl
7 апреля 2018 в 23:49
2

Вы слишком все усложнили.

Упростите это до чего-то вроде:

function addItem(add_item) {

  // parse existing storage key or string representation of empty array
  var existingEntries = JSON.parse(localStorage.getItem("list_items") || '[]');

  // Add item if it's not already in the array, then store array again
  if (!existingEntries.includes(add_item)) {
    existingEntries.push(add_item);
    localStorage.setItem("list_items", JSON.stringify(existingEntries));
  }else{
     // or tell user it's already there
     console.log(add_item + ' already exists')
  }
}
The Fat Fish
9 апреля 2018 в 21:42
0

Итак, чтобы удалить, я бы сделал: if (existingEntries.includes(add_item)) { localStorage.setItem("list_items", JSON.stringify(existingEntries)); }еще{ }

charlietfl
10 апреля 2018 в 00:04
0

вам нужно получить индекс элемента для использования splice()

avatar
Damien Asseya
7 апреля 2018 в 23:42
0

Если в вашем локальном хранилище есть данные с ключом 'list_items', localStorage.setItem("list_items", "my new data"); перезапишет старые данные.