2016-10-03 93 views
1

要我Immutable.js减少很多麻烦,这是一个伟大的图书馆,但我现在有麻烦了面对,我原来的对象来自服务器,但是当我用到它的功能,如fromJS({myObj})它的工作原理,但保存副本,但排序“az”,我做了一些需要原始结构的东西,以保持组件的顺序来自服务器,有人任何想法?避免使用排序immutable.js

回答

0

Javascript核心对象明确没有提供有关按键顺序的保证。 Immutable.Map(您的fromJS()调用的预期结果)就是这样。

如果您想要订购,您应该将订单指定为每个项目的另一个属性,或者更常规地从Array创建一个Immutable.List

换句话说,这听起来像一个方形挂钩/圆孔问题。确保你的任务使用了正确的数据结构。

+0

我尝试使用Immutable.List我得到了相同的结果,反正感谢。 下面是一个例子 [链接](https://jsfiddle.net/normanfx/sdufb9ac/) – Norman

+0

@Norman您的代码接近。对象属性不会保持其顺序。如果你想要项目有一个订单,你需要将它们存储在'List'中:'var myOrderedObj = Immutable.fromJS({name:'thing',orderedProps:[{size:1},{weight:2}] })'。然而,这是一件很奇怪的事情。 –

+0

:/好吧,我想我会用那个开始一些事情:)谢谢Trevor。 – Norman

2

fromJS默认情况下将您的对象转换为listsmaps。前者是有序的,但没有键控,而后者是键控的,但没有命令,所以都不适合你的用例。

什么你要找的是一个OrderedMap,这是一个Map有额外的插入顺序保证:

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

你先生,是救命啊! –