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

时间:2018-02-02 11:56:26

标签: 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顺序,但我得到了一个,d,c。

已更新

这是JSFiddle

Console - what I've got

我该如何解决?

1 个答案:

答案 0 :(得分:2)

我创建了一个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]))