语法
Array.from(object, mapFunction, thisValue)
参数
参数 | 描述 |
object | 必需,要转换为数组的对象。 |
mapFunction | 可选,数组中每个元素要调用的函数。 |
thisValue | 可选,映射函数(mapFunction)中的 this 对象。 |
实例
下面的实例返回集合中包含的对象数组。
var setObj = new Set(["a", "b", "c"]);
var objArr = Array.from(setObj);
objArr[1] == "b"; // true
下面的实例演示如何使用箭头语法和映射函数更改元素的值。
var arr = Array.from([1, 2, 3], x => x * 10);
// arr[0] == 10;
// arr[1] == 20;
// arr[2] == 30;
参考:http://www.runoob.com/jsref/jsref-from.html
a = [{a: "1", b: 9},{a: "2", b: 8},{a: "3", b: 7}];
b= Array.from(a,x => x.b);
//b[0] == 9;
//b[1] == 8;
//b[2] == 7;
如果环境无法使用箭头语法,就改回原始的function吧
a = [{a: "1", b: 9},{a: "2", b: 8},{a: "3", b: 7}];
b= Array.from(a,function (x) {
return x.b;
});
//b[0] == 9;
//b[1] == 8;
//b[2] == 7;
第三个参数,map函数中this指向的对象
该参数是非常有用的,我们可以将被处理的数据和处理对象分离,将各种不同的处理数据的方法封装到不同的的对象中去,处理方法采用相同的名字。
在调用Array.from对数据对象进行转换时,可以将不同的处理对象按实际情况进行注入,以得到不同的结果,适合解耦。
这种做法是模板设计模式的应用,有点类似于依赖注入。
let diObj = {
handle: function(n){
return n + 2
}
}
console.log('%s', Array.from(
[1, 2, 3, 4, 5],
function (x){
return this.handle(x)
},
diObj))
结果:
3,4,5,6,7