自定义fromJS immutablejs问题

时间:2016-12-19 12:38:02

标签: javascript reactjs redux immutable.js

我创建了一个自定义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
    }
}

1 个答案:

答案 0 :(得分:1)

通过将属性length更改为mLength来完成工作。

以下是JSBin

ImmutableJS查找length属性以检查给定值是否为array-like对象。

由于您的measurements对象具有属性length,因此它认为此对象是array-like对象并继续基于Seq类型的array-like构造,这里问题就出现了。

要确认这一点,here是jsbin,它输出Map,在measurements对象的length属性中给出no.of时间。