javascript - 从 OrderedMap 中删除元素并保持其顺序

标签 javascript immutable.js

我想创建具有键和值的 Map,并保持其中元素的顺序。

该顺序定义了屏幕上显示元素的顺序。

此外,我希望有可能删除其中一个元素并保持其顺序。

最重要的是,我认为我正在使用 immutable.js 库并且我想使用它。我可以用那个库来做吗?

这是我测试过的:

const { OrderedMap } = require("immutable");

let test = OrderedMap({ 
    a: 10, 
    b: 20, 
    c: 30, 
    d: 40
});

test = test.delete('b');

console.log(test);

它给我打印了这个: IMG

我期待 a、c、d 订单,但我得到了 a、d、c。

已更新

这是一个JSFiddle

Console - what I've got

我该如何解决?

最佳答案

我创建了一个 repo重现您的问题,但无法重现。

我在删除项目之前添加了一个 console.log(),以确保 test 在我修改它之前具有正确顺序的键。这是我的输出:

~/code/src/github.com/asday/immutablejs-delete-from-ordered-map $ node index.js
OrderedMap { "a": 10, "b": 20, "c": 30, "d": 40 }
OrderedMap { "a": 10, "c": 30, "d": 40 }

您运行代码的环境可能不遵守提供给 OrderedMap() 的键的顺序。如果是这种情况,请尝试使用 [key, value] 对数组实例化它:

let test = OrderedMap([
    ['a', 10],
    ['b', 20],
    ['c', 30],
    ['d', 40],
]);

看看是否能解决您的问题。


编辑:您的问题是您正在尝试使用 OrderedMap 的内部结构,而您应该使用在其上定义的方法。 ._map 中内容的顺序无关紧要,如您所见:

> test.toString()
"OrderedMap { "a": 10, "c": 30, "d": 40 }"

如果你想按顺序迭代你的值,你应该像这样使用 .map():

test.map((x) => console.log(x))

或者:

test.mapEntries((x) => console.log(x[0], x[1]))

关于javascript - 从 OrderedMap 中删除元素并保持其顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48582189/

相关文章:

javascript - 在 React 中是否可以使用钩子(Hook)来填充由 array.map() 生成的各个输入?

javascript - 取:first elem img src content and pop 2nd elem bg-img property (featured img in WP)

javascript - Redux - 让不可能的状态成为可能

javascript - react 性能: rendering big list with PureRenderMixin

javascript - 在 Immutable.JS 的上下文中, "dense"是什么意思?

javascript - 识别两个文本中的单词(for循环中的if语句)

javascript - SwitchMap 和 PublishReplay 组合

javascript - 更新 Immutable.js 列表中的所有对象

javascript - 在 Redux 中切换到 Immutable.js。对性能有何影响以及对组件语法有何影响?

JavaScript ArrayBuffer 切片在 Safari 9.1.2 中明显损坏