1. **使用 `Array.from()` 方法**
`Array.from()` 是ES6引入的一个静态函数,用于从类似数组或可遍历(Iterable)对象创建一个新的浅拷贝阵列。
javascript
let obj = {0: 'a', 1: 'b', length: 2};
// 使用Array.from转化
let arrFrom = Array.from(obj);
console.log(arrFrom); // 输出:['a', 'b']
在此例中,尽管obj并非真正的数组,但由于其索引是数字且包含length属性,因此可以被转换成array。
2. **扩展运算符 (`...`) 应用于解构赋值**
扩展/展开语法能有效应用于任何实现了Iterator接口的对象上,将其元素变为数组项。
javascript
let domNodesList = document.querySelectorAll('div');
// 使用扩展运算符转换为真实数组
let arrayUsingSpreadSyntax = [...domNodesList];
console.log(arrayUsingSpreadSyntax.length);
在这个例子中,querySelectorAll返回的是NodeListOf类型的结果,并非标准意义上的数组,但通过拓展运算符能够方便地转变为普通JS数组。
3. **调用 `.slice()` 或者 `.call()` 在原生构造器上的应用**
即使某个对象不是真正意义的数组,但在支持原型链继承的情况下我们可以借用Array.prototype.slice.call来模拟“切片”行为以达到转数组的效果。
javascript
function toArray(objLike){
return Array.prototype.slice.call(objLike);
}
var argumentObj = (function () {
arguments[4] = "d";
return arguments;
})(1, 2, 3);
var convertedArr = toArray(argumentObj);
console.log(convertedArr); // 输出:[1, 2, 3, undefined, "d"]
以上代码展示了如何把形似数组的参数对象argumentObj成功转换成了真实的数组格式。
总结来说,在面对不同类型的类似于数组的对象时,可以根据具体场景灵活运用上述三种技术手段完成高效的转换工作。无论是对现有数据结构的操作便利性提升还是为了进一步的数据加工整理都提供了强大的支撑功能。