Map中的不可变JS复制/复制列表

时间:2016-11-25 10:08:08

标签: immutable.js

我有像这样的不可变地图

Immutable.fromJS({
    sortingOnFields: false,
    items: [],
    selectedItems: [], 
    columnsConfigs: {
        meta: {},
        columns: {}
    },
});

如何将项目列表复制到selectedItems列表。

return state.set('selectedItems', state.get('items'));

如果我

将无法正常完成工作

props.listing.get('selectedItems').includes(Immutable.fromJS(item));

其中Immutable.fromJS(item)来自'items'列表,它返回false。

我试过这个有效,但看起来有点太多了

return state.set('selectedItems', Immutable.fromJS(state.get('items').toJS()));

任何更好解决方案的想法?

1 个答案:

答案 0 :(得分:0)

问题在于您的测试。您 在两个键上成功设置了相同的列表。您正在检索items处的值,这是一个列表,并且您将设置与selectedItems处的值完全相同的列表。

即使 正在运行,您的测试也无法正常工作。你写道:

props.listing.get('selectedItems').includes(Immutable.fromJS(item));

该行说明:在selectedItems获取列表。现在使用fromJS方法创建一个全新的Immutable对象。 selectedItems中的List是否包含新的Immutable对象?答案是否定的,因为您刚刚从头开始创建该项,因此它绝对不会包含在selectedItems的列表中。

如果每个项目都是原始值,您可以像这样检查:

props.listing.get('selectedItems').includes(item);

如果每个项目都是一个对象,那么你是否将它转换为一个Immutable对象?如果没有,那么您可以传递对该项目的引用,如上所述。如果您确实将其转换为Immutable对象,请确保将引用传递给includes方法的正确Immutable等效项。