我想显示之前写的所有密钥和存储空间。 我的代码如下。我创建了一个函数(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));
}
}
答案 0 :(得分:42)
如果您将功能修改为此功能,您可以根据键列出所有项目(仅列出项目):
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;
}
答案 1 :(得分:16)
ES2015 +中最简单的方法是:
const items = {...localStorage};
答案 2 :(得分:13)
localStorage
不是数组,而是一个对象,所以试试吧。像这样:
for (var a in localStorage) {
console.log(a, ' = ', localStorage[a]);
}
答案 3 :(得分: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);
}
答案 4 :(得分:3)
for (let [key, value] of Object.entries(localStorage)) {
console.log(`${key}: ${value}`);
}
答案 5 :(得分:2)
最简单的方法
返回JSON.stringify(localStorage);
答案 6 :(得分:1)
更简洁一点:
function getAllLocalStorage() {
return Object.keys(localStorage)
.reduce((obj, k) => {
return { ...obj, [k]: localStorage.getItem(k)}}, {});
}
答案 7 :(得分:0)
这些都是笨重的或完全错误的。
正确答案是:
JSON.parse(JSON.stringify(localStorage))
答案 8 :(得分:-1)
通过这种方式获取一组 localStorage 键:
console.log('keys: ', localStorage._keys)
尝试“正确答案”应该很明显,但如果您只想遍历或搜索键名,localStorage._keys
是您的简单起点。