最好的转换方式是什么:
['a','b','c']
to:
{
0: 'a',
1: 'b',
2: 'c'
}
最好的转换方式是什么:
['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() ) ){};
其他回答
如果你正在使用jquery:
$.extend({}, ['a', 'b', 'c']);
一个快速而肮脏的问题:
var obj = {},
arr = ['a','b','c'],
l = arr.length;
while( l && (obj[--l] = arr.pop() ) ){};
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" }
令I = 0; let myArray = ["first", "second", "third", "fourth"]; const arrayToObject = (arr) => 对象。分配(arr{},……。Map (item => ({[i++]: item}))); console.log (arrayToObject (myArray));
或使用
myArray = ["first", "second", "third", "fourth"] console.log (myArray{…})
如果你喜欢联机程序,IE8不再是一个问题(因为它应该是)
['a','b','c'].reduce((m,e,i) => Object.assign(m, {[i]: e}), {});
继续在浏览器控制台上尝试它
它可以像这样更啰嗦:
['a','b','c'].reduce(function(memo,elm,idx) {
return Object.assign(memo, {[idx]: elm});
}, {});
但还是排除了IE8的可能性。如果必须使用IE8,那么你可以像这样使用lodash/下划线:
_.reduce(['a','b','c'], function(memo,elm,idx) {
return Object.assign(memo, {[idx]: elm});
}, {})