如何将JavaScript数组(或分隔字符串)转换为具有子对象的对象

如何将JavaScript数组(或分隔字符串)转换为具有子对象的对象,javascript,Javascript,我实际上希望将字符串转换为深度对象,但我非常确定将字符串转换为数组是第一步。让我解释一下 我正在使用默认情况下将{“name”:“somePropertyName”,“value”:“someValue”}发送到服务器,但是,我希望发送{“somePropertyName”:“someValue”}。我可以通过将$.fn.editable.defaults.params设置为适当的回调来实现这一点 现在我被卡住了。我使用一种特殊的命名模式,如果名称中有句点(即名称是a.b.c),我不想将{“a.

我实际上希望将字符串转换为深度对象,但我非常确定将字符串转换为数组是第一步。让我解释一下

我正在使用默认情况下将
{“name”:“somePropertyName”,“value”:“someValue”}
发送到服务器,但是,我希望发送
{“somePropertyName”:“someValue”}
。我可以通过将
$.fn.editable.defaults.params
设置为适当的回调来实现这一点

现在我被卡住了。我使用一种特殊的命名模式,如果名称中有句点(即名称是
a.b.c
),我不想将
{“a.b.c”:“someValue”}
发送到服务器,而是将
{“a”:{“b”:{“c”:“someValue”}}
发送到服务器

我有一个部分工作的版本,但是,它不是很优雅,更重要的是,我没有得到最后的属性工作,并暂时硬编码,这是不可接受的

如何做到这一点

$.fn.editable.defaults.params = function(params){
    return nvp2obj(params.name, params.value);
}

function nvp2obj(n, v, d) {
    d = d ? d : '.';
    n = n.split('.');
    var o = {};
    var r = o;
    n.reduce(function(total, currentValue, currentIndex, arr) {
        if(r) {
            r[currentValue]={};
            r=o[currentValue];
        }
        else {
            //this is obviously not correct
            o.a.b.c=v;
        }
        return o;
        }, o);
    return o;
}
var test = nvp2obj('a.b.c', 'someValue'); //{"a":{"b":{"c":"someValue"}}}
console.log('test', JSON.stringify(test));

您可以迭代给定的键,并通过获取最后一个键来赋值

函数设置值(对象、键、值){
var last=keys.pop();
reduce((o,k)=>o[k]=o[k]| |{},object)[last]=value;
}
var检验={};
设置值(测试'a.b.c'。拆分('.'),'someValue');
设置值(测试'a.d.e'。拆分('),'someValue2');
设置值(测试'a.b.a'。拆分('.'),'someValue3');

控制台日志(测试)您可以迭代给定的键,并通过获取最后一个键来赋值

函数设置值(对象、键、值){
var last=keys.pop();
reduce((o,k)=>o[k]=o[k]| |{},object)[last]=value;
}
var检验={};
设置值(测试'a.b.c'。拆分('.'),'someValue');
设置值(测试'a.d.e'。拆分('),'someValue2');
设置值(测试'a.b.a'。拆分('.'),'someValue3');
控制台日志(测试)这个怎么样:

功能nvp2obj(n、v、d){
n=n.分裂(d | |');
n、 反向
返回n.reduce(函数(res,it){
返回{[it]:res}
},v)
}
var测试=nvp2obj('a.b.c','someValue');
log('test',JSON.stringify(test));
test=nvp2obj('a | b | c','someValue','|');
log('test',JSON.stringify(test))这个怎么样:

功能nvp2obj(n、v、d){
n=n.分裂(d | |');
n、 反向
返回n.reduce(函数(res,it){
返回{[it]:res}
},v)
}
var测试=nvp2obj('a.b.c','someValue');
log('test',JSON.stringify(test));
test=nvp2obj('a | b | c','someValue','|');

log('test',JSON.stringify(test))下一个值会发生什么情况?您的意思是如果他们想在代码中添加更多的键和值到同一对象中?不确定,不要认为他们指定了需要这样做。下一个值会发生什么情况?你的意思是如果他们想在代码中为同一对象添加更多的键和值?不确定,不要认为他们指定了他们需要这样做。
对象
在您的函数中似乎未使用,对象作为全局对象似乎无论如何都能工作。这是目前为止最好的答案。
对象
在您的函数中似乎未使用,对象作为全局对象似乎无论如何都能工作。这是目前为止最好的答案。