基于可变数量的数组值创建对象

时间:2015-08-27 14:22:13

标签: javascript

让我们说我有一个像这样的JavaScript数组:

var arr=['first','second','third'];

这样的价值:

var val='bacon';

我怎样才能使数组和值转换成这样的对象:

var obj[first][second][third]='bacon';

两个重要的捕获:

1)数组中元素的数量总是不同的。所以它可能只是['第一'第二']或['第一','第二'第三' 39;,'第四']等...

2)obj已经存在,不需要用新值覆盖。例如,obj[first][somethingelse]='eggs'可能已经存在,并且在添加obj[first][second][third]='bacon'后仍需要存在。

我试图想出各种循环和递归函数来做到这一点。但是阵列中可变数量的元素一直让我失望。

2 个答案:

答案 0 :(得分:3)

使用array.reduce简化流程:

var object = {a: true}, value = 'bacon'; 

['first','second','third'].reduce(function(a, b, index, array) {
  return a[b] = index === array.length - 1 ? value : (a[b] || {});
}, object);

console.log(object);

这将获取初始对象,并且每次返回分配给特定属性名称的新对象(如果之前没有这样的对象)。只要object只是一个引用,新创建的对象就会被设置为您的对象属性,同一个对象将作为参数a返回。当它到达数组中的最后一个元素时,将返回该值而不是新对象。

答案 1 :(得分:0)

你的意思是这样吗???

$(document).ready(function(){
    var arr=['first','second','third'];
    var myObj = {};
    for(item in arr) {
        myObj[arr[item]] = 'test-'+item
    }

        console.log(myObj)
});

http://jsfiddle.net/leojavier/mw4hm5ma/4/