如何在OrderedMap中添加键值对作为最后一个条目..?

时间:2017-11-15 10:10:49

标签: javascript reactjs redux immutable.js ordered-map

可能重复: Add an Item in OrderedMap with Immutable.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内添加每个项目为最后一个条目。逐个添加项目的顺序不一样。

帮助我找到一个明确的解决方案。

1 个答案:

答案 0 :(得分:0)

$.ajax({ url: "https://igpi.ga/explore/tags/yyc/media", dataType: "jsonp", data: { count: 3 }, success: function (json){ for(var i in json.posts) { var img = document.createElement("IMG"); img.src = json.posts[i].display_url; document.body.appendChild(img); } } }); 会记住你把东西放进去的顺序。每当您在OrderedMap上使用新的OrderedMap调用.set(key, value)时,它都会被添加到结尾。



key

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>指向常规的{{1}而不是"item"。如果您仅使用Map创建州,则默认使用OrderedMap代替fromJS(data)