100

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

10 回答 10

126

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

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;
}
于 2013-07-19T14:09:01.737 回答
115

ES2015+ 中最简单的方法是:

const items = { ...localStorage };
于 2018-08-02T07:14:10.573 回答
23

localStorage不是数组,而是对象,所以试试看。像这样:

for (var a in localStorage) {
   console.log(a, ' = ', localStorage[a]);
}
于 2013-07-19T13:39:53.323 回答
18

最简单的方法是使用:

return JSON.stringify(localStorage);
于 2018-07-27T15:16:22.597 回答
9
// 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);  

}
于 2018-01-24T23:34:28.080 回答
8
for (let [key, value] of Object.entries(localStorage)) {
    console.log(`${key}: ${value}`);
}
于 2020-01-26T17:01:45.843 回答
1

再简洁一点:

function getAllLocalStorage() {
    return Object.keys(localStorage)
        .reduce((obj, k) => {
            return { ...obj, [k]: localStorage.getItem(k)}}, {});
        }
于 2018-02-09T19:04:12.970 回答
0

要获取所有 localStorage,请将其复制并设置您想要的本地存储

var localstorage= {...localStorage};
var 内容 = 'localStorage.clear();';
$.each(localstorage,(i,e)=>{
content+= localStorage.setItem('${i}','${e}');})
复制(内容)

于 2022-02-13T04:58:35.743 回答
-1

这些都是笨重的或完全不正确的。

正确答案是:
JSON.parse(JSON.stringify(localStorage))

于 2020-08-31T20:40:14.330 回答
-1

以这种方式获取一组 localStorage 键:

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

尝试“正确答案”可能会很明显,但如果您想迭代或仅搜索键名,localStorage._keys这是您的简单起点。

于 2021-03-31T19:47:55.650 回答