2015-03-25 33 views
0

我在一个函数中创建一个对象 - 我通过3个变量,1是名称,2是名称,3是一个数组。Javascript,创建对象的最佳方法与变数

所以现在我创建这个对象,像这样

createObj(var, var2, var3){ 
    var temp1 = {}; 
    var temp2 = {}; 

    temp2[var2] = var3; 
    temp1[var] = temp2; 
    } 

创建并反对像

{var1 : {var2 : var3 }}; 

所以这个工作得很好(我想寻找这样的对象),但我m想知道是否有办法做到这一点,而不使用这么多的变量来做到这一点?如果这使得它更容易,我正在使用下划线。如果有一个更加优雅(并希望)简单的方法来实现这一点,这将是很酷的。我的意思是,这种方法对我来说很好,但是我试图提高我的JavaScript技能,并尽可能少使用代码:)。谢谢!

+2

这完全没错。只有使用ES6才能使用'{[var1]:{[var2]:var3}}'的文字。当然,如果你看到自己一遍又一遍地做这件事,你可以写一个辅助函数 - 你实际上只是在做。 – Bergi 2015-03-25 00:57:09

+0

@Bergi必须有一个更优雅的方式来做到这一点?没有? – ajmajmajma 2015-03-25 00:57:44

+0

@ajmajmajma直到ES6,因为你的密钥是动态的。 – GregL 2015-03-25 00:58:07

回答

1

这完全没问题。只有使用ES6才能使用{[var1]: {[var2]: var3}}。当然,如果你看到自己一遍又一遍地做这件事,你可以写一个辅助函数 - 你实际上只是在做。

一点更优雅的方式来写这个功能可能是

function createObj(key, val) { 
    if (arguments.length > 2) 
     val = createObj.apply(null, Array.prototype.slice.call(arguments, 1)); 
    var temp = {}; 
    temp[key] = val; 
    return temp; 
} 

,使之与无限多arguments工作。但你也可以只是做

function createObj(key, val) { 
    var temp = {}; 
    temp[key] = val; 
    return temp; 
} 

并称之为createObj(var1, createObj(var2, var3))它更好地传达你的意图。而只有两个调用你不需要循环/递归。

+0

我希望能有一些棘手的方法来做到这一点或某事,哈哈。感谢您的建议!我会将其标记为正确的。 – ajmajmajma 2015-03-25 01:07:58

相关问题