最好的转换方式是什么:

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

to:

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

当前回答

如果可以使用Map或Object。分配,很简单。

创建一个数组:

const languages = ['css', 'javascript', 'php', 'html'];

下面的代码创建了一个以index为键的对象:

Object.assign({}, languages)

在地图上复制上面相同的操作

转换为基于索引的对象{0:'css'}等…

const indexMap = new Map(languages.map((name, i) => [i, name] ));
indexMap.get(1) // javascript

转换为一个基于值的对象{css: 'css是伟大的'}等…

const valueMap = new Map(languages.map(name => [name, `${name} is great!`] ));
valueMap.get('css') // css is great

其他回答

我曾多次遇到过这个问题,并决定编写一个尽可能通用的函数。看一看,可以随意修改吗

function typeOf(obj) {
    if ( typeof(obj) == 'object' ) {
        if (obj.length)
            return 'array';
        else
            return 'object';
    } else
    return typeof(obj);
}

function objToArray(obj, ignoreKeys) {
    var arr = [];
    if (typeOf(obj) == 'object') {
        for (var key in obj) {
            if (typeOf(obj[key]) == 'object') {
                if (ignoreKeys)
                    arr.push(objToArray(obj[key],ignoreKeys));
                else
                    arr.push([key,objToArray(obj[key])]);
            }
            else
                arr.push(obj[key]);
        }
    }else if (typeOf(obj) == 'array') {
        for (var key=0;key<obj.length;key++) {
            if (typeOf(obj[key]) == 'object')
                arr.push(objToArray(obj[key]));
            else
                arr.push(obj[key]);
        }
    }
    return arr;
}
.reduce((o,v,i)=>(o[i]=v,o), {})

(文档)

或者更冗长

var trAr2Obj = function (arr) {return arr.reduce((o,v,i)=>(o[i]=v,o), {});}

or

var transposeAr2Obj = arr=>arr.reduce((o,v,i)=>(o[i]=v,o), {})

最短的一个香草JS

JSON.stringify([["a", "X"], ["b", "Y"]].reduce((o,v,i)=>{return o[i]=v,o}, {}))
=> "{"0":["a","X"],"1":["b","Y"]}"

更复杂的例子

[["a", "X"], ["b", "Y"]].reduce((o,v,i)=>{return o[v[0]]=v.slice(1)[0],o}, {})
=> Object {a: "X", b: "Y"}

甚至更短(通过使用函数(e) {console.log(e);} === (e)=>(console.log(e),e))

 nodejs
> [[1, 2, 3], [3,4,5]].reduce((o,v,i)=>(o[v[0]]=v.slice(1),o), {})
{ '1': [ 2, 3 ], '3': [ 4, 5 ] }

[/ docs]

我将使用Array.of()简单地做到这一点。Array of有能力使用它的context作为构造函数。

注2:of函数是一个有意通用的工厂方法;它 不要求它的this值是数组构造函数。 因此,它可以传递给其他构造函数或由其他构造函数继承 可以使用单个数值参数调用。

因此,我们可以将array .of()绑定到一个函数,并生成类似object的数组。

虚函数(){}; var thingy = Array.of.apply(dummy,[1,2,3,4]); console.log(页面);

通过使用array .of(),甚至可以进行数组子类化。

如果你正在使用jquery:

$.extend({}, ['a', 'b', 'c']);

我们可以使用Object。赋值和数组。reduce函数将数组转换为对象。 Var arr = [{a:{b:1}},{c:{d:2}}] var newObj = arr。reduce((a, b) =>对象。赋值(a, b), {}) console.log (newObj)