【问题标题】:Javascript array to multi level ObjectJavascript数组到多级对象
【发布时间】:2017-04-14 16:36:47
【问题描述】:

我在 JavaScript 中有一个数组,需要将其转换为多级对象。 例子: 输入:

var myArray = ["abc", "def", "ghi"] ;

我想要的输出:

var myObj = {abc:{ def: { ghi: {} } }};

用 JavaScript 实现它的最有效方法是什么?

【问题讨论】:

  • 你能告诉我们你的“低效”方式,也许我们可以改进它吗?
  • 这种写法听起来更像是要求免费编写代码,而不是你的代码。 Stackoverflow 不是免费的代码编写服务,但如果你展示你的尝试和研究努力,将会得到很多帮助

标签: javascript arrays json object


【解决方案1】:

您可以使用reduce() 并将空对象作为累加器传递。

var myArray = ["abc", "def", "ghi"] ;
var obj = {} 

myArray.reduce((r, e) => r[e] = {}, obj);
console.log(obj)

【讨论】:

  • 如果你只是将整个reduce函数分配给一个变量,为什么它不起作用?喜欢var res = myArray.reduce((..) => ..., {});
  • 我认为这是因为最后一件事 reduce 返回是这个 (r[e] = {}) 等于这个 jsfiddle.net/Lg0wyt9u/1796
  • 你可以放弃||,因为你知道你总是在一个空对象上操作。 myArray.reduce((r, e) => r[e]={}, obj);
  • 听起来合乎逻辑。顺便说一句,@squint,你能解释一下为什么如果我们将 reduce 函数分配给一个变量,它就不起作用了吗?是关于内纳德所说的吗?
  • @Kind user 为了清楚起见,我们使用 obj 作为累加器,但您将 reduce 的结果分配给一个变量,这是 reduce 的最后一个返回值,如您在此处看到的 jsfiddle.net/Lg0wyt9u/1797
猜你喜欢
  • 2019-06-30
  • 2015-02-23
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多