Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于可变数量的数组值创建对象_Javascript - Fatal编程技术网

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

假设我有一个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=['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的一部分