本文介绍在 JavaScript 中将数组元素添加到对象的最简方法。通过 [].push.apply(obj, array) 利用 apply 修改 this 指向,将数组元素作为属性添加到对象,并自动设置 length 属性,适用于需要代码简洁的场景。
JavaScript 数组转对象:使用 apply 和 push 的最简实现
在开发中,有时需要将数组的元素转换为对象的属性。
//如题,通常做法就是循环数组,最后在添加length属性,如:
var obj = {};
var pushArr = [11,22,33,44,55,66];
for(var i=0;i<pushArr.length;i++) {
obj[i] = pushArr[i];
}
obj.length = pushArr.length;
console.log(obj); //{0:11,1:22,2:33,3:44,4:55,5:66,length:6}
常规做法通常涉及遍历数组,手动将每个元素赋值给对象的对应索引,最后再手动添加 length 属性。例如: 上述代码执行后,对象 obj 将包含从 0 开始的索引属性以及 length 属性,结果为 {0:11, 1:22, 2:33, 3:44, 4:55, 5:66, length:6}。
//js将数组元素添加到对象中(或 数组转换成对象)有个小技巧:
var obj = {};
[].push.apply(obj,[11,22,33,44,55,66]);
console.log(obj); //{0:11,1:22,2:33,3:44,4:55,5:66,length:6}
由于obj是个对象没有像数组的push()方法,所以利用数组的push()以及apply()的特性来将数组作用于push()并修改当前的引用。 有较严重的代码洁癖的患者可以使用这个方法。
这里介绍一个更简洁的技巧,利用数组的 push 方法和 apply 方法: 由于普通对象 obj 本身没有 push 方法,我们可以借用数组原型上的 push 方法。通过 apply 将 push 方法的 this 指向 obj,并将数组 [11, 22, 33, 44, 55, 66] 作为参数传入。这样,数组中的每个元素会被依次添加到 obj 中,同时 obj 会自动获得 length 属性。最终输出的 obj 结构与常规做法一致:{0:11, 1:22, 2:33, 3:44, 4:55, 5:66, length:6}。这种方法代码更简洁,适合对代码整洁度有要求的开发者使用。