【问题标题】:Lodash sort list of objects based on keyLodash基于键的对象排序列表
【发布时间】:2017-03-16 06:52:09
【问题描述】:

我正在寻找基于键对对象列表进行排序

这是我的对象

var Categories =    {

      "social": [
        {
          "id": "social_001",
          "lastModified": "2 Day ago"
        }
      ],
"communication": [
        {
          "id": "communication_001",
          "lastModified": "4 Day ago"
        },
        {
          "id": "communication_002",
          "lastModified": "1 Day ago"
        }
      ],
      "storage": [
        {
          "id": "storage_001",
          "lastModified": "3 Day ago"
        }
      ]
    }

所以在输出中排序的对象将以 communication 开头, 社交 , 存储 建议我一些帮助。

【问题讨论】:

  • @MartinSchneider 我正在寻找使用 lodash 的解决方案
  • 来自链接的问题:'JavaScript 对象没有排序。试图对它们进行“排序”是没有意义的。 '
  • @MartinSchneider 这在 ES2015 中已更改。字符串键将按创建顺序迭代。
  • 我已更正:在 es2015 中,键将按创建顺序迭代,@Matt 是对的。

标签: javascript node.js lodash


【解决方案1】:

这是一个使用 lodash 的解决方案:

var Categories = {
  "social": [
    {
      "id": "social_001",
      "lastModified": "2 Day ago"
    }
  ],
  "communication": [
    {
      "id": "communication_001",
      "lastModified": "4 Day ago"
    },
    {
      "id": "communication_002",
      "lastModified": "1 Day ago"
    }
  ],
  "storage": [
    {
      "id": "storage_001",
      "lastModified": "3 Day ago"
    }
  ]
}

var ordered = {};   
_(Categories).keys().sort().each(function (key) {
  ordered[key] = Categories[key];
});

Categories = ordered;

【讨论】:

  • lodash 实际上与 Object.keys(Categories).sort().forEach(key => o[key] = Categories[key]) 的本机代码没有太大区别。即使你使用.reduce 两者还是一样的!
【解决方案2】:

使用 lodash _.keysObject.keys 从对象中获取键数组,并使用 JavaScript 的 sort()sort().reverse() 对该数组进行升序或降序排序。

然后使用这个数组来拾取每个对象 yourObject[array[0]].

【讨论】:

    猜你喜欢
    • 2022-07-22
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多