我正在尝试构建一个快速JavaScript函数,它将接收如下的JavaScript对象:
{
"sample[one]": "value 1",
"sample[hard][damn_you[0]]": "this 1",
"sample[hard][damn_you[1]]": "this 2"
}
并将其转换为类似的内容:
{
"[sample][one]": "value 1",
"[sample][hard][damn_you][0]": "this 1",
"[sample][hard][damn_you][1]": "this 2"
}
微妙但很大的区别。我已经解决了第一部分,它涉及将文本的第一部分包装在方括号中,但是当它取出嵌套的方括号并将它们放出时,我很茫然。我已经尝试了很长一段时间没有成功。这是我到目前为止所做的:
var data = {
"sample[one]": "value 1",
"sample[hard][damn_you[0]]": "this 1",
"sample[hard][damn_you[1]]": "this 2"
},
subset = /^([a-z0-9-_]+?)\[/i;
for (var key in data) {
if (subset.test(key)) {
data[key.replace(subset,'[$1][')] = data[key];
} else {
data[key.replace(/^(.+)$/,'[$1]')] = data[key];
}
delete data[key];
}
哪个输出:
{
"[sample][one]": "value 1",
"[sample][hard][damn_you[0]]": "this 1",
"[sample][hard][damn_you[1]]": "this 2"
}
但是在提取那些嵌套的方括号时却不知所措。有什么想法吗?
答案 0 :(得分:2)
基本上,您正在寻找不是方括号的每个连续字符集。括号的顺序并不重要。所以你可以很容易地做到这样的事情:
key = "["
+key.replace(/]/g,'[') // replace close brackets with open ones
// (to make them the same symbol)
.replace(/\[+$/,'') // trim off brackets at the end of the string
.replace(/\[+/g,"][") // replace brackets with "][" (separating the words)
+"]";
因此,例如sample[hard][damn_you[0]]
会执行以下步骤:
sample[hard][damn_you[0]]
sample[hard[[damn_you[0[[
sample[hard[[damn_you[0
[sample][hard][damn_you][0]