从fromjs到嵌套有序的地图,用不变的js



是否有人建议使用Immutable.js?

您可以创建自己的自定义转换。例如,将JS对象变成Immutable.OrderedMap

function fromJSOrdered(js) {
  return typeof js !== 'object' || js === null ? js :
    Array.isArray(js) ? 
      Immutable.Seq(js).map(fromJSOrdered).toList() :
      Immutable.Seq(js).map(fromJSOrdered).toOrderedMap();
}

fromJS具有一个称为reviver的第二个参数,可以完全用于此。

import Immutable from 'immutable';
const reviver = (key, value) => 
    Immutable.Iterable.isKeyed(value) ? value.toOrderedMap() : value.toList();
const data = Immutable.fromJS(js, reviver);

@AlbertOlivé的响应在我的案例使用方面存在问题,因为递归和缺乏主要环境。我尝试了第二个上下文参数以映射,再次出现问题。最后,我意识到,我不在关心订单中的订单,仅在主要地图中传递给该功能,以维护服务器在HTML列表上提供的订单。因此,我将功能更改为没有递归的方式:

 fromJSOrdered(js) {
    if (typeof js !== 'object' || js === null || Array.isArray(js)) { 
      return  fromJS(js);
    }
    return new OrderedMap(fromJS(js));
  }

我实际上发布了一个包,该软件包可以将对象,数组或 Map的对象转换为不变的List'S和Record'S:

https://github.com/jhukdev/immutable-parsejs

,如果您不想要Record的s,可以查看源,易于更改。

Record的虽然很好,因为您可以直接访问属性,这意味着如果您想离开immutablejs,这是一个更容易的前景

最新更新