Javascript 基于可变数量的数组值创建对象
假设我有一个JavaScript数组,如下所示:Javascript 基于可变数量的数组值创建对象,javascript,Javascript,假设我有一个JavaScript数组,如下所示: var arr=['first','second','third']; var val='bacon'; var obj[first][second][third]='bacon'; 这样的值: var arr=['first','second','third']; var val='bacon'; var obj[first][second][third]='bacon'; 如何将数组和值转换为如下对象: var arr=['fir
var arr=['first','second','third'];
var val='bacon';
var obj[first][second][third]='bacon';
这样的值:
var arr=['first','second','third'];
var val='bacon';
var obj[first][second][third]='bacon';
如何将数组和值转换为如下对象:
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'
之后仍然需要存在
我尝试了各种循环和递归函数来实现这一点。但是数组中元素数量的变化总是让我感到困惑。使用
数组。减少以简化过程:
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
返回。当它到达数组中的最后一个元素时,返回的是值,而不是新对象。您的意思是这样的吗
$(document).ready(function(){
var arr=['first','second','third'];
var myObj = {};
for(item in arr) {
myObj[arr[item]] = 'test-'+item
}
console.log(myObj)
});
那么如果有两个数组怎么办呢[第一个][第二个][第三个]
?这可能吗?并至少显示一些代码。无法通过obj[first][somethingelse]='eggs'
测试-覆盖现有对象。修复了将value:{}
替换为value:(a[b]| |{})
的问题,这正是我要做的。。。谢谢你的评论。起初我认为它需要覆盖,没有引起足够的注意。我的井只是一个测试,以表明它不是空的。可能是什么?这真是太棒了!感谢您成为人类@smnbbrv的一部分