假设我有一个像这样的 JavaScript 数组:
var arr=['first','second','third'];
像这样的值:
var val='bacon';
我怎样才能将数组和值转换成这样的对象:
var obj[first][second][third]='bacon';
两个重要的收获:
1) 数组中元素的数量总是不同的。所以它可能只是 ['第一','第二'] 或 ['第一','第二','第三','第四'] 等等...
2) obj 已经存在,不需要用新值覆盖。例如,obj[first][somethingelse]='eggs'
可能已经存在,并且在obj[first][second][third]='bacon'
之后仍然需要存在> 已添加。
我尝试想出各种循环和递归函数来做到这一点。但数组中元素数量的变化一直困扰着我。
最佳答案
使用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);
这会获取初始对象,并且每次都会返回分配给特定属性名称的新对象(如果之前没有类似的对象)。只要对象只是一个引用,新创建的对象就会被设置为您的对象属性,并且相同的对象将作为参数a
返回。当到达数组中的最后一个元素时,将返回该值而不是新对象。
关于javascript - 基于可变数量的数组值创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32251977/