将数组转换为对象

新手上路,请多包涵

转换的最佳方法是什么:

['a','b','c']

至:

{
  0: 'a',
  1: 'b',
  2: 'c'
}

原文由 David Hellsing 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 769
2 个回答

ECMAScript 6 引入了易于填充的 Object.assign

Object.assign() 方法用于复制所有的值

从一个或多个源对象到目标的可枚举自身属性

目的。它将返回目标对象。

 Object.assign({}, ['a','b','c']); // {0:"a", 1:"b", 2:"c"}

数组自身的 length 属性不会被复制,因为它不可枚举。

此外,您可以在对象上使用 ES8 扩展语法 来实现相同的结果:

 { ...['a', 'b', 'c'] }

对于自定义键,您可以使用 reduce

 ['a', 'b', 'c'].reduce((a, v) => ({ ...a, [v]: v}), {})
 // { a: "a", b: "b", c: "c" }

原文由 Oriol 发布,翻译遵循 CC BY-SA 4.0 许可协议

具有这样的功能:

 function toObject(arr) {
  var rv = {};
  for (var i = 0; i < arr.length; ++i)
    rv[i] = arr[i];
  return rv;
}

您的数组或多或少已经只是一个对象,但数组确实具有一些关于整数命名属性的“有趣”和特殊行为。上面会给你一个普通的对象。

编辑 哦,你也可能想考虑数组中的“漏洞”:

 function toObject(arr) {
  var rv = {};
  for (var i = 0; i < arr.length; ++i)
    if (arr[i] !== undefined) rv[i] = arr[i];
  return rv;
}

在现代 JavaScript 运行时中,您可以使用 .reduce() 方法:

 var obj = arr.reduce(function(acc, cur, i) {
  acc[i] = cur;
  return acc;
}, {});

这也避免了阵列中的“漏洞”,因为这就是 .reduce() 的工作原理。

原文由 Pointy 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题