Javascript 展平/展开对象:我是否在正确的轨道上?

Javascript 展平/展开对象:我是否在正确的轨道上?,javascript,forms,object,Javascript,Forms,Object,我想展平多层对象,反之亦然。 例如: { option1:value1, option2:value2, option3:{ key1:value31, key2:value32 }, option4:[value40,value41,value42] } 相当于: { option1:value1, option2:value2, "option3.key1":value31, "opt

我想展平多层对象,反之亦然。 例如:

{
    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"/>

这是一种标准方法,还是有更好的方法?是否有库已经这样做了?

该格式({option4.2:value42})将不起作用(因为键中的.in将被解析为点运算符)。相反,您需要引用密钥:

{ 'option4.2': value42 }
然而,这是非常不标准的。通常不需要展平对象-如果要将此类对象提交到服务器,可以使用JSON对其进行序列化,而无需展平:

var stringForServer = JSON.stringify(normalObject);
如果您正在寻找一个库来操作对象和数组等,下划线可能是您最好的选择:


干杯

我尝试了我的想法,它很好,但有一些局限性

最明显的是一个键不能包含一个点(使用这种技术,点是分隔符),键不能是数字(或者算法将其解释为数组索引)


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

如果您使用PHP,并且您使用
,那么在服务器端,您将获得
$\u POST['option4'][0]
@Kolink我完全在客户端工作,没有服务器交互.thx作为回复。我关心的一个问题是从表单中收集数据,并使其成为结构化对象或数组。一旦我得到了对象或数组,我就没事了。我还更正了问题,引用了键,谢谢!