我有字符串“presentation.launchBehavior.newWindow”
,需要将其反序列化为对象:
var obj = {presentation: {launchBehavior: 'newWindow'}}
点后的最后一个字符串应该是值,而其他字符串应该转换为字符串。我已经编写了执行此操作的函数:
function des(obj, property, index, ar) {
var isLastCall = ar.length - 1 === index;
if (isLastCall) {
return;
}
var isNextLastCall = ar.length - 2 === index;
if (isNextLastCall) {
obj[property] = ar[ar.length - 1];
return obj;
} else {
obj[property] = {};
return obj[property];
}
}
var obj = {};
"presentation.launchBehavior.newWindow".split(".").reduce(des, obj);
obj.presentation.launchBehavior // newWindow
它正在工作,但我想改进它以返回结果对象,而不必在函数外部创建变量。我怎样才能做到这一点?也许函数的内部也可以改进。
最佳答案
您可以使用reduceRight
:
const des = str => str.split(".").reduceRight( (prev, key) => ({[key]: prev}) );
console.log(des("presentation.launchBehavior.newWindow"));
关于javascript - 改进将点表示法序列化对象转换为js对象的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37785593/