如何在事先不知道密钥的情况下检索所有 localStorage 项目?

问题描述 投票:0回答:13

我想显示之前编写的所有密钥和存储。 我的代码如下。我创建了一个函数(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));
        }
    }
javascript local-storage
13个回答
166
投票

ES2015+中最简单的方法是:

const items = { ...localStorage };

146
投票

如果将函数修改为此,您可以根据键列出所有项目(仅列出项目):

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 循环(这是此选项)更快。

但是,这不会显示按键。为此,您需要返回一个对象而不是数组(在我看来,这是毫无意义的,因为这将使您与之前使用 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;
}

26
投票

最简单的方法是使用:

return JSON.stringify(localStorage);

23
投票

localStorage
不是一个数组,而是一个对象,所以尝试一下。像这样:

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

14
投票
// iterate localStorage
for (let i = 0; i < localStorage.length; i++) {

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

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

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

}

10
投票
for (let [key, value] of Object.entries(localStorage)) {
    console.log(`${key}: ${value}`);
}

1
投票

更简洁一点:

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

1
投票

要获取所有“localStorage”,请将其复制并设置

localStorage
到您想要的位置

let localstorage= {...localStorage}
let content = 'localStorage.clear()

$.each(localstorage,(i,e)=> {
   content+=`localStorage.setItem('${i}','${e}');`}) 
copy(content)

0
投票

您可以使用 for 循环和

hasOwnProperty
来检查对象是否有键。

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

0
投票

这将返回所有设置的键

const getLocalStorageObject = () => {
    storage = {}
    let index = 0

    while (localStorage.key(index) !== null) {
        const key = localStorage.key(index);
        storage[key] = localStorage.getItem(key)
        index += 1
    } 

    return storage;
}

0
投票

希望对你有帮助,我添加了一个 rest 参数,这样只允许保留需要的属性

  localStorage.setItem("clear", "values")
  const {clear, ...rest } = localStorage;



  function allStorage(val) {
    const { ...rest } = localStorage;
    return val ? Object.keys(rest) : Object.values(rest);
  }
  console.log(allStorage(false));

-1
投票

通过这种方式获取 localStorage 键的数组:

console.log('keys: ', localStorage._keys)

通过尝试“正确答案”可能应该是显而易见的,但如果您想迭代或仅搜索关键名称,

localStorage._keys
是您的简单起点。


-3
投票

这些都很庞大或者完全不正确。

正确答案是:

JSON.parse(JSON.stringify(localStorage))

© www.soinside.com 2019 - 2024. All rights reserved.