有没有人建议使用 Immutable.js 将 js 列表列表深度转换为嵌套有序映射的最佳方法?
问问题
1462 次
4 回答
3
您可以创建自己的自定义转换。例如,将 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();
}
于 2017-03-06T07:24:42.087 回答
1
fromJS
有一个名为reviver的第二个参数,它可以完全用于此目的。
import Immutable from 'immutable';
const reviver = (key, value) =>
Immutable.Iterable.isKeyed(value) ? value.toOrderedMap() : value.toList();
const data = Immutable.fromJS(js, reviver);
于 2020-03-26T09:21:07.057 回答
0
由于递归和缺乏主要上下文,@Albert Olivé 的回复对我的案例使用有问题。我已经尝试使用第二个上下文参数来映射,但又出现了问题。最后我意识到我并不关心子图中的顺序,只是在传递给函数的主图中,以维护服务器在 html 列表上提供的顺序。所以我以这种方式将函数更改为不递归:
fromJSOrdered(js) {
if (typeof js !== 'object' || js === null || Array.isArray(js)) {
return fromJS(js);
}
return new OrderedMap(fromJS(js));
}
于 2018-05-10T07:03:49.230 回答
0
我最近实际上发布了一个包,它可以将一个对象、数组或Map
对象转换为 ImmutableList
和Record
:
https://github.com/jhukdev/immutable-parsejs
不想要的可以看一下源码Record
,很容易改。
Record
的很好,因为您可以直接访问属性,这意味着将来如果您想从 ImmutableJs 切换,这是一个更容易的前景
于 2021-11-24T13:44:59.643 回答