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

标签 javascript

假设我有一个像这样的 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/

相关文章:

javascript - 根据条件语句创建动态div

javascript - 如何隐藏机器人窗口/iframe

javascript - 使用两个数组排序

javascript - 如何在 svg 中构建非常大的矩阵

javascript - 慢慢改 "right"/"left"

javascript - "if"和 "with"绑定(bind)处理程序导致所有事件处理程序丢失(即使是使用 jQuery 的 on() 创建的)

javascript - 将数字转换为字母javascript

c# - 使用 View 模型中的 MVC View 返回 JsonResult 数据

javascript - 查看器JS : is it possible to disable buttons?

javascript - 将 mysql 日期时间转换为 javascript 日期时遇到问题