如何通过 KEY ASC 订购 localStorage?
How to order localStorage by KEY ASC?
我将数据保存到localStorage。
为了能够订购 localStorage,我使用毫秒作为键。
(但 localStorage 不排序或排序,所以我需要构建一个数组或对象,我可以按键排序)
var key = Date.now();
var value = {
"id": id,
"name": name
};
//ADD DATA TO OBJECT
localStorage.setItem(key, JSON.stringify(value));
现在我想获取 localStorage 并显示按 asc 键排序的数据。
我试过了:
//CONSOLE LOG LOCALSTORAGE
Storage {1614866637849: "{"id":"1","name":"A"}", 1614866687890: "{"id":"3","name":"C"}", 1614866642078: "{"id":"2","name":"B"}", length: 3}
//DECLARE NEW OBJ
var items = {};
//LOOP THREW localStorage
Object.keys(localStorage).forEach(function(key){
//FETCH THIS ROUND DATA
items[key] = JSON.parse(localStorage.getItem(key));
});
//CONSOLE LOG ITEMS
1614866637849: {…}, 1614866687890: {…}, 1614866642078: {…}}
//SORT ITEMS
var sorted_items = Object.keys(items).reduce((accumulator, currentValue) => {accumulator[currentValue] = items[currentValue]; return accumulator;}, {});
//CONSOLE LOG SORTED ITEMS
1614866637849: {…}, 1614866687890: {…}, 1614866642078: {…}}
看来我的排序函数什么也没做?
我如何通过按键 ASC 从 localStorage 循环出我的数据?
我不想要的顺序是:
....49
....78
....90
如果您只想按键顺序打印结果,只需 sort
在调用 forEach
之前的键。
Object.keys(localStorage).sort().forEach...
如果你想排序“对”,因为不能保证键顺序,你可以试试下面的方法。
const storage = {
1614866637849: '{"id":"1","name":"A"}',
1614866687890: '{"id":"3","name":"C"}',
1614866642078: '{"id":"2","name":"B"}'
};
const pairs = Object.entries(storage)
.map(([key, value]) => ({
key: parseInt(key),
value: JSON.parse(value)
}))
.sort(({ key: keyA }, { key: keyB }) => keyA - keyB);
console.log(pairs);
.as-console-wrapper { top: 0; max-height: 100% !important; }
你可以这样做:
Object.entries(YOUROBJECT).sort().reduce( (o,[k,v]) => (o[k]=v,o), {} );
你的例子:
var yourdata = {1614866637849:{"id":"1","name":"A"}, 1614866687890:{"id":"3","name":"C"}, 1614866642078:{"id":"2","name":"B"}, length: 3};
console.log("BEFORE", yourdata);
console.log("NOW", Object.entries(yourdata).sort().reduce( (o,[k,v]) => (o[k]=v,o), {} ));
结果:
1614866637849: {id: "1", name: "A"}
1614866642078: {id: "2", name: "B"}
1614866687890: {id: "3", name: "C"}
致谢:
Sort JavaScript object by key
@sravan 甘吉
@Mr.polywhirl评论了最简单最聪明的方法
只需在 forEach 中添加 .sort():
Object.keys(localStorage).sort().forEach(function(key){..
我将数据保存到localStorage。
为了能够订购 localStorage,我使用毫秒作为键。
(但 localStorage 不排序或排序,所以我需要构建一个数组或对象,我可以按键排序)
var key = Date.now();
var value = {
"id": id,
"name": name
};
//ADD DATA TO OBJECT
localStorage.setItem(key, JSON.stringify(value));
现在我想获取 localStorage 并显示按 asc 键排序的数据。
我试过了:
//CONSOLE LOG LOCALSTORAGE
Storage {1614866637849: "{"id":"1","name":"A"}", 1614866687890: "{"id":"3","name":"C"}", 1614866642078: "{"id":"2","name":"B"}", length: 3}
//DECLARE NEW OBJ
var items = {};
//LOOP THREW localStorage
Object.keys(localStorage).forEach(function(key){
//FETCH THIS ROUND DATA
items[key] = JSON.parse(localStorage.getItem(key));
});
//CONSOLE LOG ITEMS
1614866637849: {…}, 1614866687890: {…}, 1614866642078: {…}}
//SORT ITEMS
var sorted_items = Object.keys(items).reduce((accumulator, currentValue) => {accumulator[currentValue] = items[currentValue]; return accumulator;}, {});
//CONSOLE LOG SORTED ITEMS
1614866637849: {…}, 1614866687890: {…}, 1614866642078: {…}}
看来我的排序函数什么也没做?
我如何通过按键 ASC 从 localStorage 循环出我的数据?
我不想要的顺序是:
....49
....78
....90
如果您只想按键顺序打印结果,只需 sort
在调用 forEach
之前的键。
Object.keys(localStorage).sort().forEach...
如果你想排序“对”,因为不能保证键顺序,你可以试试下面的方法。
const storage = {
1614866637849: '{"id":"1","name":"A"}',
1614866687890: '{"id":"3","name":"C"}',
1614866642078: '{"id":"2","name":"B"}'
};
const pairs = Object.entries(storage)
.map(([key, value]) => ({
key: parseInt(key),
value: JSON.parse(value)
}))
.sort(({ key: keyA }, { key: keyB }) => keyA - keyB);
console.log(pairs);
.as-console-wrapper { top: 0; max-height: 100% !important; }
你可以这样做:
Object.entries(YOUROBJECT).sort().reduce( (o,[k,v]) => (o[k]=v,o), {} );
你的例子:
var yourdata = {1614866637849:{"id":"1","name":"A"}, 1614866687890:{"id":"3","name":"C"}, 1614866642078:{"id":"2","name":"B"}, length: 3};
console.log("BEFORE", yourdata);
console.log("NOW", Object.entries(yourdata).sort().reduce( (o,[k,v]) => (o[k]=v,o), {} ));
结果:
1614866637849: {id: "1", name: "A"}
1614866642078: {id: "2", name: "B"}
1614866687890: {id: "3", name: "C"}
致谢: Sort JavaScript object by key @sravan 甘吉
@Mr.polywhirl评论了最简单最聪明的方法
只需在 forEach 中添加 .sort():
Object.keys(localStorage).sort().forEach(function(key){..