基于序列化对象创建数组

时间:2013-11-19 22:02:51

标签: javascript arrays

给定一个像这样的JavaScript对象:(它来自序列化的表单数据)

{
  "my_data[options][0][foo]": "a", 
  "my_data[options][0][bar]": "b",
  "my_data[options][1][foo]": "c",
  "my_data[options][1][bar]": "d",
  "my_data[options][2][foo]": "e",
  "my_data[options][2][bar]": "f"
}

我如何操纵它以便最终得到:

[
  {foo: "a", bar: "b"},
  {foo: "c", bar: "d"},
  {foo: "e", bar: "f"}
]

虽然这里只有3个物体,但实际上会有未知数量的物体。

修改
多一点信息。

我之所以这样做是因为我需要从页面上的表单元素中获取数据。

<form>
  <input type="text" name="my_data[something]" />
  <input type="text" name="unrelated_thing" />

在表单中,我有一个矩阵,其中包含以下字段:

<table>
  <tr>
    <td><input type="text" name="my_data[options][0][foo]" /></td>
    <td><input type="text" name="my_data[options][0][bar]" /></td>
  </tr>
  <tr>
    <td><input type="text" name="my_data[options][1][foo]" /></td>
    <td><input type="text" name="my_data[options][1][bar]" /></td>
  </tr>
  etc...
</table>

我需要从数组中的矩阵(my_data[options])中获取数据,以便迭代它。

我认为序列化表单然后操纵数据比迭代每个表行然后遍历每个字段要快。

2 个答案:

答案 0 :(得分:0)

这样的事情:

var res = [];
for(var i in mydata[options]) {
    res.push({foo: i[foo], bar: i[bar]});
}

答案 1 :(得分:0)

我最终只是迭代了tr,然后是input s里面 我使用带有正则表达式的str.replace来删除name属性的相应部分。