从PHP表单输入名称在JavaScript中生成对象

从PHP表单输入名称在JavaScript中生成对象,javascript,forms,object,Javascript,Forms,Object,有两个类似的问题,但没有一个涉及字符串类似于some name[][some key]的情况。我试过JSON.parse('some-name[][some-key]')但它不解析它 有没有一种方法可以将这样的字符串转换为类似于{'some name':{0:{'some key':'}}}的JavaScript对象 这是表单字段的名称。它通常由PHP解析,但我想用JavaScript以同样的方式解析它。我基本上有,我想把它转换成var something={'some name':{0:{'s

有两个类似的问题,但没有一个涉及字符串类似于
some name[][some key]
的情况。我试过
JSON.parse('some-name[][some-key]')但它不解析它

有没有一种方法可以将这样的字符串转换为类似于
{'some name':{0:{'some key':'}}}
的JavaScript对象

这是表单字段的名称。它通常由PHP解析,但我想用JavaScript以同样的方式解析它。我基本上有
,我想把它转换成
var something={'some name':{0:{'some key':VALUE-OF-THIS-FIELD}}

试试这个:

JSON.parse('{ "some-name": [ {   "some-key": "" }   ] }');
var input = …,
    something = {};

var names = input.name.match(/^[^[\]]*|[^[\]]*(?=\])/g);
for (var o=something, i=0; i<names.length-1; i++) {
    if (names[i])
        o = o[names[i]] || (o[names[i]] = names[i+1] ? {} : []);
    else
        o.push(o = names[i+1] ? {} : []);
}
if (names[i])
    o[names[i]] = input.value;
else
    o.push(input.value);

编辑:根据您更新的示例,您可以制作如下内容(下面的视图)。这将起作用,但仅适用于当前示例

var convertor = function(element) {
    var elementName = element.getAttribute('name');

    var inpIndex = elementName.substring(0, elementName.indexOf('[')),
        keyIndex = elementName.substring(elementName.lastIndexOf('[') + 1, elementName.lastIndexOf(']'));

    var strToObj = "var x = {'" + inpIndex + "': [{'" + keyIndex + "': '" + element.value + "'}]}";
    eval(strToObj);
    return x;
};
var myObject = convertor(document.getElementById('yourInputID'));
这里的示例: (结果在console.log中可见)


旧的响应

使用
eval
。。但是您的字符串必须具有有效的javascript语法

因此:

将返回语法错误

有效语法为:

var str = "var arr = []; arr[123] = 'toto'";
var x = eval(str);
console.log(arr);

我不知道您是如何做到这一点的,但假设它们都是那种格式(
name[][key]
),您需要一个接一个地执行它们-这对我很有用:

var fieldObj = {};
function parseFieldName(nameStr)
{
    var parts = nameStr.match(/[^[\]]+/g);
    var name = parts[0];
    var key = typeof parts[parts.length-1] != 'undefined' ? parts[parts.length-1] : false;
    if(key===false) return false;
    else
    {
        if(!fieldObj.hasOwnProperty(name)) fieldObj[name] = [];
        var o = {};
        o[key] = 'val';
        fieldObj[name].push(o);
    }
}
parseFieldName('some-name[][some-key]');
parseFieldName('some-name[][some-key2]');
parseFieldName('some-name2[][some-key]');
console.log(fieldObj); //Firebug shows: Object { some-name=[2], some-name2=[1]}  -- stringified: {"some-name":[{"some-key":"val"},{"some-key2":"val"}],"some-name2":[{"some-key":"val"}]}
o[key]=“val”可以更改为
o[key]=$(“[name=“+nameStr+”])。val()
或您想如何处理它。

尝试以下操作:

JSON.parse('{ "some-name": [ {   "some-key": "" }   ] }');
var input = …,
    something = {};

var names = input.name.match(/^[^[\]]*|[^[\]]*(?=\])/g);
for (var o=something, i=0; i<names.length-1; i++) {
    if (names[i])
        o = o[names[i]] || (o[names[i]] = names[i+1] ? {} : []);
    else
        o.push(o = names[i+1] ? {} : []);
}
if (names[i])
    o[names[i]] = input.value;
else
    o.push(input.value);
var输入=…,
某物={};
var names=input.name.match(/^[^[\]]*|[^[\]]*(?=\])/g);

对于(var o=something,i=0;iI有一种感觉,这是XY问题的一个例子。在任何情况下,字符串的变量是多少?它们总是这种格式吗?第一个括号集中会有什么东西吗?可能的字符串的示例及其结果是useful@SmokeyPHP第一个括号里可能有些东西。我加了一个空胸罩我想用JavaScript来维护这个功能。这是一个每个字段的转换,还是希望所有具有相同
some-name
名称的字段被编译成一个对象?即
{some-name':{0:…,1:…,2:…}
任何一个都可以。我可以在以后将其合并到一个对象中。当使用PHP提交表单时,我会在
$\u请求['some-name']
中提供它-理想情况下,这应该以相同的方式解析它。我有
并且我想将其转换为
var something={'something':{0:{'some key':VALUE-OF-THIS-FIELD}}
谢谢!是的,这会起作用,但我希望我可以避免使用
indexOf
、regexp和类似的方法:)我希望我可以得到类似PHP的
$\u请求['some-name']
在JavaScript中使用,无需重新加载页面,也无需提交表单。看起来类似的功能不可用。。。