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

我尝试了我的想法,它工作正常,但有一些限制。

显而易见的是,键不能包含点(点是这种技术的分隔符),并且键不能是数字(否则算法会将其解释为数组索引)。

另一个问题是,如果值是空对象或数组(例如 option4:[]),它将不起作用。

于 2013-01-31T19:57:00.600 回答