我想显示之前编写的所有密钥和存储。 我的代码如下。我创建了一个函数(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));
}
}
ES2015+中最简单的方法是:
const items = { ...localStorage };
如果将函数修改为此,您可以根据键列出所有项目(仅列出项目):
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;
}
最简单的方法是使用:
return JSON.stringify(localStorage);
localStorage
不是一个数组,而是一个对象,所以尝试一下。像这样:
for (var a in localStorage) {
console.log(a, ' = ', localStorage[a]);
}
// 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);
}
for (let [key, value] of Object.entries(localStorage)) {
console.log(`${key}: ${value}`);
}
更简洁一点:
function getAllLocalStorage() {
return Object.keys(localStorage)
.reduce((obj, k) => {
return { ...obj, [k]: localStorage.getItem(k)}}, {});
}
要获取所有“localStorage”,请将其复制并设置
localStorage
到您想要的位置
let localstorage= {...localStorage}
let content = 'localStorage.clear()
$.each(localstorage,(i,e)=> {
content+=`localStorage.setItem('${i}','${e}');`})
copy(content)
您可以使用 for 循环和
hasOwnProperty
来检查对象是否有键。
for (var key in localStorage) {
if (localStorage.hasOwnProperty(key)) {
console.log(key, ' = ', localStorage[key]);
}
}
这将返回所有设置的键
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;
}
希望对你有帮助,我添加了一个 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));
通过这种方式获取 localStorage 键的数组:
console.log('keys: ', localStorage._keys)
通过尝试“正确答案”可能应该是显而易见的,但如果您想迭代或仅搜索关键名称,
localStorage._keys
是您的简单起点。
这些都很庞大或者完全不正确。
正确答案是:
JSON.parse(JSON.stringify(localStorage))