将数组转换为对象

2022-08-29 22:33:13

转换的最佳方式是什么:

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

自:

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

答案 1

ECMAScript 6 引入了易于 polyfillable Object.assignment

该方法用于将所有可枚举自己的属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。Object.assign()

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

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

此外,还可以在对象上使用 ES8 跨页语法来实现相同的结果:

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

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

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

答案 2

使用如下函数:

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()