// 通过 makeArray 方法,把数组转成伪数组 | |
function makeArray(arrayLike) { | |
let result = []; | |
for (let i = 0, len = arrayLike.length; i < len; i++) { | |
result.push(arrayLike[i]); | |
} | |
return result; | |
} | |
function doSomething () { | |
let args = makeArray(arguments); | |
console.log(args); | |
} | |
doSomething(1, 2, 3); | |
// 输出: [1, 2, 3] |
这个方法虽然有效,但要多写很多代码。
方法2
function doSomething () { | |
let args = Array.prototype.slice.call(arguments); | |
console.log(args); | |
} | |
doSomething(1, 2, 3); | |
// 输出: [1, 2, 3] |
这个方法的功能和 方法1 是一样的,虽然代码量减少了,但不能很直观的让其他开发者觉得这是在转换。
ES6的做法
直到 ES6 提供了 Array.from 方法完美解决以上问题。
function doSomething () { | |
let args = Array.from(arguments); | |
console.log(args); | |
} | |
doSomething('一', '二', '三'); | |
// 输出: ['一', '二', '三'] |
Array.from
的主要作用就是把伪数组和可遍历对象转换成数组的。
说“主要作用”的原因是因为 Array.from
还提供了2个参数可传。这样可以延伸很多种小玩法。
Array.from
的第二个参数是一个函数,类似 map遍历 方法。用来遍历的。
Array.from
的第三个参数接受一个 this 对象,用来改变 this 指向。
第三个参数的用法(不常用)
let helper = { | |
diff: 1, | |
add (value) { | |
return value + this.diff; // 注意这里有个 this | |
} | |
}; | |
function translate () { | |
return Array.from(arguments, helper.add, helper); | |
} | |
let numbers = translate(1, 2, 3); | |
console.log(numbers); // 2, 3, 4 |
Array.from
其他玩法
创建长度为5的数组,且初始化数组每个元素都是1
let array = Array.from({length: 5}, () => 1) | |
console.log(array) | |
// 输出: [1, 1, 1, 1, 1] |
第二个参数的作用和 map遍历 差不多的,所以 map遍历 有什么玩法,这里也可以做相同的功能。就不多赘述了。
把字符串转换成数组
let msg = 'hello'; | |
let msgArr = Array.from(msg); | |
console.log(msgArr); | |
// 输出: ["h", "e", "l", "l", "o"] |
如果传一个真正的数组给 Array.from
会返回一个一模一样的数组。
题库分享
**1、**前端后端面试题库 推荐:★★★★★
地址:前端面试题库
2、前端技术导航大全 推荐:★★★★★
地址:前端技术导航大全
3、开发者颜色值转换工具 推荐:★★★★★
地址 :开发者颜色值转换工具
4、前端边框阴影在线工具 推荐:★★★★★
地址:前端边框阴影在线工具