【问题标题】:Keep order of Immutable JS Map保持不可变 JS 映射的顺序
【发布时间】:2019-03-28 13:09:49
【问题描述】:

我有一个像这样的 JavaScript 数组

const data = 
[
   {
       id: 19,
       date: 01.01.2001,
       content: ...
   },
   {
       id: 85,
       date: 10.10.2002,
       content: ...
   },
   {
       id: 1113,
       date: 07.09.2018,
       content: ...
   },
   ...
];

最初,data 来自服务器时是未排序的。我将datadate 排序,将其保存在array 中以保持其顺序。

const data = 
[
   {
       id: 1113,
       date: 07.09.2018,
       content: ...
   },
   {
       id: 85,
       date: 10.10.2002,
       content: ...
   },
   {
       id: 19,
       date: 01.01.2001,
       content: ...
   },
   ...
];

但是,使用id 访问元素将导致整个数组的迭代。使用这种结构将它们存储在object

const obj = 
{
    19: {
            date: 01.01.2001,
            content: ...,
         },
    85: {
            date: 10.10.2002,
            content: ....,
        },
    1113: {
            date; 07.09.2018,
            content: ...
          }
}

将使访问更容易,但不会排序。 我正在寻找一种不可变的 JS 方式来将数据存储在 Map 中,例如 obj,但保持其顺序但 datekey 应该是 id

如何按date 排序,但将id 保留为key

【问题讨论】:

  • “但是那个有性能问题” ---难道不是因为存储原始订单的原因吗?
  • @zerkms 抱歉,我编辑了我的 Q。
  • 现在你没有问题
  • 如果您要更改对象的构造方式以更快地提取所需数据,您为什么要关心它的顺序?
  • @zerkms 我认为这很明显。加了一句带问号

标签: javascript immutable.js


【解决方案1】:

Myp 本身是未排序的。也许您可以将对象保存在数组中,并构建一个映射以便快速访问(可能以惰性方式,或者急切地遍历数组一次)。最佳解决方案取决于数据量以及您正在使用它做什么

【讨论】:

    【解决方案2】:

    我想你现在已经解决了这个问题。但是 Immutable.orderedMap 似乎是您的完美解决方案。

    https://immutable-js.github.io/immutable-js/docs/#/OrderedMap

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 2016-05-20
      • 2014-04-18
      相关资源
      最近更新 更多