2016-05-12 46 views
-1

我想这一点:创建嵌套对象的一小段路

  1. var options.server.socketOptions.keepalive = 120;

这是被称为点符号

但它不起作用,众所周知。 所以我要做到这一点:

  • var options = {}; options.server = {} options.server.socketOptions = {} options.server.socketOptions.keepalive = 120;
  • 我能做到,而不是这样的:

  • var options = { server: {socketOptions: {keepalive:120}}}
  • 这是JSON格式

    但是有没有更优雅的方式使用点符号而不是JSON方式?

    如果有必要,我会使用一个几乎只有这样的小库。
    但我不要想要使用类似咖啡下划线
    首选我想知道什么是可能的香草方式

    +0

    _var options = {server:{socketOptions:{keepalive:120}}} _这是最短的方式 – Sapotero

    +0

    第二种方式更优雅,更易读。可悲的是,除了使用括号表示之外,没有其他方式可以创建它。 –

    +0

    你可以用你的方法覆盖一些其他的属性/值(比如'option.something' ...) –

    回答

    1

    您可以直接在JavaScript中使用对象文字。
    但是你可以使用一个辅助函数来构造对象:

    function build(props, value) { 
        return props.split('.').reverse().reduce(function(acc, key, index) { 
        if (index === 0) { 
         acc[key] = value; 
         return acc; 
        } 
        var obj = {}; 
        obj[key] = acc; 
        return obj; 
        }, {}); 
    } 
    
    var options = build('server.socketOptions.keepalive', 120); 
    
    console.log(obj); // prints { server: {socketOptions: { keepalive:120 } } } 
    

    检查the demo