最好的转换方式是什么:

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

to:

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

当前回答

一个快速而肮脏的问题:

var obj = {},
  arr = ['a','b','c'],
  l = arr.length; 

while( l && (obj[--l] = arr.pop() ) ){};

其他回答

如果可以使用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

使用javascript#forEach可以做到这一点

var result = {},
    attributes = ['a', 'b','c'];

attributes.forEach(function(prop,index) {
  result[index] = prop;
});

ECMA6:

attributes.forEach((prop,index)=>result[index] = prop);

如果你正在使用angularjs,你可以使用angular。Extend,与$的效果相同。jquery的扩展。

var newObj = {};
angular.extend(newObj, ['a','b','c']);

我会使用下划线,但如果没有的话我会使用reduce,初始值为空对象{}

>>> ['a', 'b', 'c'].reduce(function(p, c, i) {p[i] = c; return p}, {})
Object { 0="a", 1="b", 2="c"}

reduce应该在今天的大多数浏览器中广泛使用,参见MDN

如果你想使用迭代对象的一个属性作为键,例如:

// from:
const arr = [
    {
        sid: 123,
        name: 'aaa'
    },
    {
        sid: 456,
        name: 'bbb'
    },
    {
        sid: 789,
        name: 'ccc'
    }
];
// to:
{
  '123': { sid: 123, name: 'aaa' },
  '456': { sid: 456, name: 'bbb' },
  '789': { sid: 789, name: 'ccc' }
}

Use:

const result = arr.reduce((obj, cur) => ({...obj, [cur.sid]: cur}), {})