0

マルチレベル オブジェクトをフラット化したい、またはその逆を行いたい。例えば:

{
    option1:value1,
    option2:value2,
    option3:{
        key1:value31,
        key2:value32
    },
    option4:[value40,value41,value42]
}

次と同等です。

 {
    option1:value1,
    option2:value2,
    "option3.key1":value31,
    "option3.key2":value32,
    "option4.0":value40,
    "option4.1":value41,
    "option4.2":value42
}

これは小さなオブジェクト用です。平坦化された式の目的は、フォームでのデータ収集とデフォルト オプションとのマージを容易にすることです。たとえば、次のようなフォーム要素を使用できます。

<input name="option4.0" value="value40"/>

これは標準的なアプローチですか、それとももっと良い方法がありますか? すでにこれを行っているライブラリはありますか?

4

2 に答える 2

2

その形式 ({ option4.2: value42 }) は機能しません (キーの . がドット演算子として解析されるため)。代わりに、キーを引用する必要があります。

{ 'option4.2': value42 }

ただし、これは非常に標準的ではありません。通常、オブジェクトのフラット化は必要ありません。そのようなオブジェクトをサーバーに送信する場合は、JSON を使用してフラット化せずにシリアル化できます。

var stringForServer = JSON.stringify(normalObject);

オブジェクトや配列などを操作するためのライブラリを探している場合は、アンダースコアがおそらく最善の策です。

乾杯!

于 2013-01-30T21:04:44.633 に答える
0

私は自分のアイデアを試してみました。問題なく動作しますが、いくつかの制限があります。

明らかなことは、キーにドットを含めることはできず (ドットはこの手法の区切り記号です)、キーを数字にすることはできません (そうしないと、アルゴリズムはそれを配列インデックスとして解釈します)。

もう 1 つの問題は、値が空のオブジェクトまたは配列 (例: option4:[]) の場合は機能しないことです。

于 2013-01-31T19:57:00.600 に答える