2014-08-28 86 views
-6

我正在寻找一个散列,创建一系列深层的密钥,然后将另一个散列附加到最后。动态创建一个关联数组

给出

...

var hash_a = {'foo': 'bar'} 
var hash_b = {'alpha': 'beta'} 
var array = ['a', 'b', 'c'] 

我怎么能生成以下?

{ 
    'foo': 'bar', 
    'a':{ 
    'b':{ 
     'c': { 
     'alpha': 'beta' 
     } 
    } 
    } 
}; 
+0

不要只问一下怎么做,展示你到目前为止已经尝试过的东西:http://stackoverflow.com/help/on-topic – Blubberguy22 2014-08-28 19:20:15

回答

1

这应该做的伎俩:

var hash_a = {'foo': 'bar'}; 
var hash_b = {'alha': 'beta'}; 
var array = ['a', 'b', 'c']; 

function build(a,b,c){ 
    var o=c.reduceRight(function(o, n){ var b={}; b[n]=o; return b; }, b); 
    for(x in a){ o[x]=a[x]; } 
    return o; 
} 

这里是fiddle一起玩。 有关Array.prototype.reduceRight()的进一步说明,请参阅MDN

+0

这很接近,但仍然不太正确。在函数第二行的上下文中,b被附加到散列,而不是作为散列,而是作为[Object] – adamwong246 2014-08-28 21:34:00

+0

与对象有什么不同?看看http://jsfiddle.net/a8mmfpxw/3/使用警报,因为打字垫 – 2014-08-28 22:17:45

+0

恐怕,在我目前对js的理解(不是很多!)中,我无法回答这个问题。也许这将有助于https://gist.github.com/adamwong246/2d732c3537f4774334f6 – adamwong246 2014-08-29 00:25:16