如何将键值对添加为OrderedMap中的最后一个条目



可能的重复:在有序映射中添加不可变项.js

使用 redux 存储不可变 js OrderedMap。

Redux 存储结构:

   {
     "app": {
        "name": "Test app",
        "dataPack":{
          "chemID": "aaaa",
          "item": {
            "yp57m359": {
            "solid": 33,
            "liquid": 45,
            "gas": 65
           },
           "h58wme1y": {
             "solid": 87,
             "liquid": 9,
             "gas": 30
           },
           "dff56fhh": {
             "solid": 76,
             "liquid": 43,
             "gas": 77
           }
         }
       }
     }
  }

减速机代码:

return state.setIn(["app","dataPack","item",action.item_id],
  fromJS({
    "solid": action.soildVal,
    "liquid": action.liquidVal,
    "gas": action.gasVal
}));

其中action.item_id是随机 ID(每个项目的键(。

上面的代码非常适合添加项目。

问题是:物品存储在随机位置。我需要保持我添加的顺序。需要将每个项目添加为item中的最后一个条目。逐个添加项的顺序不同。

帮助我为此获得明确的解决方案。

OrderedMap会记住你把东西放进去的顺序。每次您在 OrderedMap 上使用新key调用.set(key, value)时,它都会添加到末尾。

let state = Immutable.Map({
  "app": Immutable.Map({
    "name": "Test App",
    "dataPack": Immutable.Map({
      "chemId": "aaaa",
      "items": Immutable.OrderedMap({}) // this is the thing we want ordered
    })
  })
});
state = state.setIn(['app', 'dataPack', 'items', 'yp57m359'], Immutable.Map({
  'first': 'item'
}));
state = state.setIn(['app', 'dataPack', 'items', 'h58wme1y'], Immutable.Map({
  'second': 'item'
}));
state = state.setIn(['app', 'dataPack', 'items', 'dff56fhh'], Immutable.Map({
  'third': 'item'
}));
console.log(state.toJS()); // notice things are in order
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.js"></script>

很难确切地说出您的问题出在哪里,因为我们看不到您是如何创建商店的,但我的猜测是"item"指向的是普通的旧Map而不是OrderedMap。如果您只是使用 fromJS(data) 来创建状态,它将默认使用 Map 而不是 OrderedMap

相关内容

  • 没有找到相关文章

最新更新