2016-10-03 38 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

你先生,是救命啊! –