如何通过 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){..