Как получить все элементы localStorage, не зная заранее ключей? - программирование
Подтвердить что ты не робот

Как получить все элементы localStorage, не зная заранее ключей?

Я хочу показать все ключи и хранилище, написанные ранее. Мой код ниже. Я создал функцию (allStorage), но она не работает. Как я могу это сделать?

    function storeUserScribble(id) {
        var scribble = document.getElementById('scribble').innerHTML;
        localStorage.setItem('userScribble',scribble);
    }

    function getUserScribble() {
        if ( localStorage.getItem('userScribble')) {
            var scribble = localStorage.getItem('userScribble');
        }
        else {
            var scribble = 'You can scribble directly on this sticky... and I will also remember your message the next time you visit my blog!';
        }
        document.getElementById('scribble').innerHTML = scribble;
    }

    function clearLocal() {
        localStorage.clear();
        return false;
    }

    function allStorage() {
        var archive = [];
        for (var i = 0; i<localStorage.length; i++) {
            archive[i] = localStorage.getItem(localStorage.key(i));
        }
    }
4b9b3361

Ответ 1

Если вы измените свою функцию на это, вы можете перечислить все элементы на основе ключа (будут перечислены только элементы):

function allStorage() {

    var values = [],
        keys = Object.keys(localStorage),
        i = keys.length;

    while ( i-- ) {
        values.push( localStorage.getItem(keys[i]) );
    }

    return values;
}

Object.keys - новое дополнение к JavaScript (ECMAScript 5). Он перечисляет все собственные ключи объекта, который быстрее, чем использование цикла for-in, который является вариантом для этого.

Однако это не покажет ключи. Для этого вам нужно вернуть объект вместо массива (который скорее не имеет точечной IMO, так как это приведет вас к тому, что вы были до этого с localStorage только с другим объектом, но, например, ради):

function allStorage() {

    var archive = {}, // Notice change here
        keys = Object.keys(localStorage),
        i = keys.length;

    while ( i-- ) {
        archive[ keys[i] ] = localStorage.getItem( keys[i] );
    }

    return archive;
}

Если вы хотите распечатать компактный формат, сделайте это вместо этого: здесь каждый элемент в массиве будет иметь key=item, который позже вы можете разбить на пары и т.д.:

function allStorage() {

    var archive = [],
        keys = Object.keys(localStorage),
        i = 0, key;

    for (; key = keys[i]; i++) {
        archive.push( key + '=' + localStorage.getItem(key));
    }

    return archive;
}

Ответ 2

localStorage не является массивом, а объектом, поэтому попробуйте sth. например:

for (var a in localStorage) {
   console.log(a, ' = ', localStorage[a]);
}

Ответ 3

Самый простой способ в ES2015+:

const items = {...localStorage};

Ответ 4

// iterate localStorage
for (var i = 0; i < localStorage.length; i++) {

  // set iteration key name
  var key = localStorage.key(i);

  // use key name to retrieve the corresponding value
  var value = localStorage.getItem(key);

  // console.log the iteration key and value
  console.log('Key: ' + key + ', Value: ' + value);  

}

Ответ 5

Немного более кратко:

function getAllLocalStorage() {
    return Object.keys(localStorage)
        .reduce((obj, k) => {
            return { ...obj, [k]: localStorage.getItem(k)}}, {});
        }

Ответ 6

Самый простой способ

return JSON.stringify(localStorage);