避免使用 immutable.js 排序

Avoid sorting using immutable.js

对我来说 Immutable.js 减少了很多麻烦并且它是一个很棒的库,但现在我遇到了麻烦,我的原始对象来自服务器但是当我使用它的任何功能时 fromJS({myObj}) 它可以工作,但保存了一个副本,但已排序 "a-z" 我正在制作一些需要原始结构的东西,以保持组件来自服务器的顺序,有人有想法吗?

Javascript 核心对象明确不提供有关键顺序的保证。 Immutable.Map(您的 fromJS() 调用的预期结果)紧随其后。

如果您想要订购,您应该将每件商品的订购指定为另一个 属性,或者更传统地,从 Array.[=14 创建一个 Immutable.List =]

换句话说,这听起来像是一个方形 peg/round 洞问题。确保您为任务使用了正确的数据结构。

默认情况下,

fromJS 将您的对象翻译成 listsmaps。前者是有序的,但不是键控的,而后者是键控的,但不是有序的,所以都不适合你的用例。

您要找的是 OrderedMap,这是一个 Map 并有额外的广告订单保证:

import { OrderedMap } from 'immutable';
const orderedMap = OrderedMap({key: "value"});

您仍然可以通过使用 fromJS 来实现它:它有一个名为 reviver 的第二个参数,它也可以用于使用 OrderedMaps 而不是标准地图:

import Immutable from 'immutable';
const reviver = (key, value) => 
    Immutable.Iterable.isKeyed(value) ? value.toOrderedMap() : value.toList();
const data = Immutable.fromJS(js, reviver);