最好的转换方式是什么:
['a','b','c']
to:
{
0: 'a',
1: 'b',
2: 'c'
}
最好的转换方式是什么:
['a','b','c']
to:
{
0: 'a',
1: 'b',
2: 'c'
}
当前回答
你可以使用这样的函数:
var toObject = function(array) {
var o = {};
for (var property in array) {
if (String(property >>> 0) == property && property >>> 0 != 0xffffffff) {
o[i] = array[i];
}
}
return o;
};
这个方法可以更有效地处理稀疏数组。
其他回答
如果你正在使用angularjs,你可以使用angular。Extend,与$的效果相同。jquery的扩展。
var newObj = {};
angular.extend(newObj, ['a','b','c']);
为了完整起见,这里有一个O(1) ES2015方法。
var arr = [1, 2, 3, 4, 5]; // array, already an object
Object.setPrototypeOf(arr, Object.prototype); // now no longer an array, still an object
FWIW,另一种最近的方法是使用Object. fromentries和Object。条目如下:
const arr = ['a','b','c'];
arr[-2] = 'd';
arr.hello = 'e';
arr.length = 17;
const obj = Object.fromEntries(Object.entries(arr));
...它允许避免将稀疏数组项存储为未定义或空,并保留非索引(例如,非正整数/非数字)键。
{0: "a", 1: "b", 2: "c", "-2": "d", hello: "e"}
(这里的结果与@Paul Draper的对象相同。分配的答案。)
你可能希望加上arr。长度,但不包括在内:
obj.length = arr.length;
一个快速而肮脏的问题:
var obj = {},
arr = ['a','b','c'],
l = arr.length;
while( l && (obj[--l] = arr.pop() ) ){};
为什么没人尝试?在ES6
let arr = ['a','b','c']
let {...obj} = arr
console.log(obj) // {0: 'a', 1: 'b', 2: 'c'}
let {...obj2} = ['a','b','c']
console.log(obj2) // {0: 'a', 1: 'b', 2: 'c'}
很简单的方法吗?