让我们说我有一个像这样的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'
后仍需要存在。
我试图想出各种循环和递归函数来做到这一点。但是阵列中可变数量的元素一直让我失望。
答案 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)
});