ES6从数组创建记录的不可变映射的方法

时间:2018-07-12 17:30:25

标签: ecmascript-6 immutability

在此示例中,ProjectCategory扩展了Immutable.Record

const ProjectCategoryRecord = Immutable.Record({
  id: 0,
  title: 'Default Title',
  description: 'Default Description',
  projects:  []
});

class ProjectCategory extends ProjectCategoryRecord{
    constructor(props) {
        super(props);
    }
}

我目前正在通过json对象数组创建这些对象:

let entityMap = OrderedMap();
entities.forEach((entity) => {
    entityMap = entityMap.set(entity.id, new ProjectCategory(entity))
});

我认为有一种方法可以做到:

let entityMap = OrderedMap((entities) =>{
    ...
})

但是我无法使其工作....因为OrderedMap是不可变的,所以不可能吗?

2 个答案:

答案 0 :(得分:0)

我认为这是一个很好的解决方案-但我不确定

let entityMap = OrderedMap(entities.map(function (object) {
    return [object.id, new ProjectCategory(object)]
}));

答案 1 :(得分:0)

const map = OrderedMap(arr.reduce(
    (acc, obj) => ({
        ...acc,
        [obj.id]: new ProjectCategory(obj),
    }), {}));

如果您仍然认为它不够干净, 使用extendable immutable并自定义您的构造函数。