将两类对象转为真正的数组
Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。
一个转换类数组对象到数组的一个示例:
let list = document.querySelectorAll('ul.fancy li');
Array.from(list).forEach(function (li) {
document.write(li);
});
上面代码中,querySelectorAll方法返回的是一个类似数组的对象,只有将这个对象转为真正的数组,才能使用forEach方法。
任何有length属性的对象,都可以通过Array.from方法转为数组。
let array = Array.from({ 0: "a", 1: "b", 2: "c", length: 3 });
document.write(array); // [ "a", "b" , "c" ]
Array.from()还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理。
let array = [0,1,2,3,4];
let arrNew = Array.from(array, x => x * x);
console.log(arrNew);
// 等同于
let arrNew = Array.from(array).map(x => x * x);
下面的例子将数组中布尔值为false的成员转为0。
Array.from([1, , 2, , 3], (n) => n || 0)
// [1, 0, 2, 0, 3]
Array.from()的一个应用是,将字符串转为数组,然后返回字符串的长度。这样可以避免JavaScript将大于\uFFFF的Unicode字符,算作两个字符的bug。
function countSymbols(string) {
return Array.from(string).length;
}
请在右侧的环境中,定义一个对象person,名字分别为张三、李四、王五,并有length属性,用Array.from转换为数组。