Array.from() 方法用于将一个类数组对象或可迭代对象转换成一个新的数组实例。
该方法为 ECMAScript 2015 新添加的数组方法。
Array.from(typedArr [, fn [, arg]])
| 参数 | 说明 | 类型 |
|---|---|---|
typedArr | 想要转换成数组的伪数组对象或可迭代对象 | typed array |
fn | (可选)如果指定了该参数,新数组中的每个元素会执行该回调函数。 | function |
arg | (可选)执行回调函数 mapFn 时 this 对象 | object |
返回值: 一个新的数组实例。
Array.from() 方法转换成真正的数组:length 属性和若干索引属性的任意对象Map 和 Set 等Array.from() 方法有一个可选参数 fn,让你可以在最后生成的数组上再执行一次 Array.prototype.map 方法后再返回。也就是说 Array.from(typedArr, fn, arg) 就相当于 Array.from(typedArr).map(fn, arg) ,除非创建的不是可用的中间数组。 这对一些数组的子类,如对类型化数组来说很重要,因为中间数组的值在调用 map() 时需要是适当的类型。from() 的 length 属性为 1 ,即 Array.from.length === 1。Class 语法允许我们为内置类型(比如 Array)和自定义类新建子类(比如叫 SubArray)。这些子类也会继承父类的静态方法,比如 SubArray.from(),调用该方法后会返回子类 SubArray 的一个实例,而不是 Array 的实例。const bar = ['a', 'b', 'c'];Array.from(bar); // ["a", "b", "c"]Array.from('foo'); // ["f", "o", "o"]
Array.from('foo'); // ["f", "o", "o"]
Setlet s = new Set(['foo', window]);Array.from(s); // ["foo", window]
Maplet m = new Map([[1, 2],[2, 4],[4, 8],]);Array.from(m); // [[1, 2], [2, 4], [4, 8]]
function f() {return Array.from(arguments);}f(1, 2, 3); // [1, 2, 3]
// Using an arrow function as the map function to// manipulate the elementsArray.from([1, 2, 3], (x) => x + x); // [2, 4, 6]// Generate a sequence of numbers// Since the array is initialized with `undefined` on each position,// the value of `v` below will be `undefined`Array.from({ length: 5 }, (v, i) => i); // [0, 1, 2, 3, 4]
function combine() {let arr = [].concat.apply([], arguments); // 没有去重复的新数组return Array.from(new Set(arr));}const m = [1, 2, 2],n = [2, 3, 3];console.log(combine(m, n)); // [1, 2, 3]
参考资料: