我想创建具有键和值的 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);
我期待 a、c、d 订单,但我得到了 a、d、c。
已更新
这是一个JSFiddle
我该如何解决?
最佳答案
我创建了一个 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/