2016-12-19 8 views
1

カスタムオブジェクトfromJSを作成しました。オブジェクトを不変オブジェクトに変換すると、結果にはリストとマップの代わりにOrderedSetとMapsのみが含まれるようになりました。Custom fromJS immutablejs issue

これは、オブジェクト内のキーを「長さ」と呼ぶ以下の場合を除いて、完全に正常に機能しました。問題をどのように解決するか?

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

mLengthにプロパティlengthを変更することで働いてしまいました。ここで

JSBin

ImmutableJSで与えられた値がarray-likeオブジェクトであるかどうかをチェックするためにlengthプロパティを探します。

あなたmeasurementsオブジェクトがプロパティlengthを持っているので、このオブジェクトはarray-likeオブジェクトであり、array-likeタイプに基づいてSeq建設を続け、ここでの問題が始まると考えています。これを確認する


heremeasurementsオブジェクトの長さプロパティで指定された時間は、No.ofとMapを出力jsbinあります。