javascript - 改进将点表示法序列化对象转换为js对象的功能

标签 javascript

我有字符串“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/

相关文章:

javascript - 如何访问加载的 map 图 block 的源路径

javascript - ionic 输入不起作用但输入有效

javascript - 合并两个深度数组

javascript - Atom 编辑器 - JS 的 TODO 亮点?

javascript - 使用 jQuery 更改点击时文本的颜色

javascript - polymer 事件未触发

javascript - 将 POST 数据发送到 PHP 脚本 - jQuery、AJAX 和 PHP

javascript - 减法运算符如何触发数组到数字的转换?

javascript - JS font-resize 在除 IE 之外的浏览器中逐渐不起作用

javascript - OrbitControls 在 Angular2 和 Three.js 中未定义