Array.from允许在JavaScript集合(如:数组、类数组、对象、字符串、map、set等可迭代对象)上进行有用的转换
arrayLike就是Array.from遍历的对象,mapFn就类似map和forEach的回调,参数是一样的
Array.from([1,2,3,4], (item,index) => {
// 元素和下标
console.log(item, index)
return item+1
})
1、填充数组
基本类型
需求:创建一个数组长度为10,用6填满
// 可以用Array.from
function createArrayByFrom(length, fill) {
return Array.from({length: length}, () => fill)
}
// 也可以用Array.fill
function createArrayByFill(length, fill) {
return Array(length).fill(fill)
}
引用类型
需求:创建一个数组长度为3,用空对象填满
const length = 3;
const resultA = Array.from({ length: length }, () => ({}));
const resultB = Array(length).fill({});
resultA; // => [{}, {}, {}]
resultB; // => [{}, {}, {}]
resultA[0] === resultA[1]; // => false
resultB[0] === resultB[1]; // => true
这里我们发现了问题,用fill填充空对象时实际上是一个对象,fill就拿的同一个对象复制下来的。而Array.from则是每次在第二个回调函数里返回一个新的对象。
二维数组
需求:创建一个10*10的二维数组结构,并且内容从1-100递增展示
let arr =
Array.from({ length: 10 }, (_, y) =>
Array.from({ length: 10 },
(_, x) => x + 1 + y * 10,
)
)