我创建了一个自定义fromJS函数,这样当我将对象转换为Immutable对象时,结果将只包含OrderedSets和Maps(而不是Lists和Maps)。
除了在下面的对象中的键被称为“长度”的情况下,这已经完全正常。任何想法如何解决手头的问题?
var imm = require("immutable")
function fromJS(js) {
return typeof js !== 'object' || js === null ? js :
Array.isArray(js) ?
imm.Seq(js).map(fromJS).toOrderedSet() :
imm.Seq(js).map(fromJS).toMap();
}
var output = fromJS({
measurements: {
length: 10,
weight: 30
}
}).toJS();
// output is :
{
measurements: {
0: undefined,
1: undefined
....
32: undefined
}
}
答案 0 :(得分:1)
通过将属性length
更改为mLength
来完成工作。
以下是JSBin
ImmutableJS查找length
属性以检查给定值是否为array-like对象。
由于您的measurements
对象具有属性length
,因此它认为此对象是array-like
对象并继续基于Seq
类型的array-like
构造,这里问题就出现了。
要确认这一点,here是jsbin,它输出Map
,在measurements
对象的length属性中给出no.of时间。