【问题标题】:How to order localStorage by KEY ASC?如何通过 KEY ASC 订购 localStorage?
【发布时间】:2021-03-04 14:38:43
【问题描述】:

我将数据保存到 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

【问题讨论】:

  • 你试过了吗:Object.keys(localStorage).sort().forEach
  • @Mr.Polywhirl 不,直到现在。但这似乎有效?!

标签: javascript local-storage


【解决方案1】:

如果您只想按键顺序打印结果,只需在调用forEach 之前sort 键即可。

Object.keys(localStorage).sort().forEach...

如果你想要排序的“pairs”,因为key order不能保证,你可以试试下面的。

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; }

【讨论】:

    【解决方案2】:

    你可以这样做:

    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 甘吉

    【讨论】:

      【解决方案3】:

      @Mr.polywhirl 评论了最简单和最聪明的方法

      只需在 forEach 中添加 .sort():

      Object.keys(localStorage).sort().forEach(function(key){..
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-16
        • 1970-01-01
        • 2018-09-29
        • 2020-08-31
        • 2018-09-09
        • 1970-01-01
        • 2013-06-30
        • 1970-01-01
        相关资源
        最近更新 更多