转换的最佳方法是什么:
['a','b','c']
至:
{
0: 'a',
1: 'b',
2: 'c'
}
转换的最佳方法是什么:
['a','b','c']
至:
{
0: 'a',
1: 'b',
2: 'c'
}
这是咖啡脚本中的解决方案
arrayToObj = (arr) ->
obj = {}
for v,i in arr
obj[i] = v if v?
obj
let i = 0;
let myArray = ["first", "second", "third", "fourth"];
const arrayToObject = (arr) =>
Object.assign({}, ...arr.map(item => ({[i++]: item})));
console.log(arrayToObject(myArray));
或使用
myArray = ["first", "second", "third", "fourth"]
console.log({...myArray})
我会简单地用Array.of()
。数组可以将其上下文用作构造函数。
注2:功能是有意通用的工厂方法。它不需要其this值是Array构造函数。因此,它可以被其他构造函数传递或继承,这些构造函数可以使用单个数字参数调用。
因此,我们可以绑定Array.of()
到一个函数并生成一个类似于对象的数组。
function dummy(){};
var thingy = Array.of.apply(dummy,[1,2,3,4]);
console.log(thingy);
通过利用Array.of()
甚至可以做数组子分类。
这是我刚写的一个递归函数。它很简单,效果很好。
// Convert array to object
var convArrToObj = function(array){
var thisEleObj = new Object();
if(typeof array == "object"){
for(var i in array){
var thisEle = convArrToObj(array[i]);
thisEleObj[i] = thisEle;
}
}else {
thisEleObj = array;
}
return thisEleObj;
}
这是一个示例(jsFiddle):
var array = new Array();
array.a = 123;
array.b = 234;
array.c = 345;
var array2 = new Array();
array2.a = 321;
array2.b = 432;
array2.c = 543;
var array3 = new Array();
array3.a = 132;
array3.b = 243;
array3.c = 354;
var array4 = new Array();
array4.a = 312;
array4.b = 423;
array4.c = 534;
var array5 = new Array();
array5.a = 112;
array5.b = 223;
array5.c = 334;
array.d = array2;
array4.d = array5;
array3.d = array4;
array.e = array3;
console.log(array);
// Convert array to object
var convArrToObj = function(array){
var thisEleObj = new Object();
if(typeof array == "object"){
for(var i in array){
var thisEle = convArrToObj(array[i]);
thisEleObj[i] = thisEle;
}
}else {
thisEleObj = array;
}
return thisEleObj;
}
console.log(convArrToObj(array));
结果:
您可以使用点差运算符
x = [1,2,3,10]
{...x} // {0:1, 1:2, 2:3, 3:10}
惊讶地没看到-
Object.assign({}, your_array)
我们可以使用Object.assign
和array.reduce
函数将Array转换为Object。
var arr = [{a:{b:1}},{c:{d:2}}]
var newObj = arr.reduce((a, b) => Object.assign(a, b), {})
console.log(newObj)
这是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
具有这样的功能:
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()
有效的。
您可以使用如下函数:
这应该更有效地处理稀疏数组。