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