我真的无法理解这个使用Array.from
的功能。我引用了mozilla documentation,但它并没有真正说明论点,所以任何人都可以解释这是如何起作用的。
const chunk = (arr, size) => Array.from({length: Math.ceil(arr.length / size)}, (v, i) => arr.slice(i * size, i * size + size));
它将一个数组切成大小为size
的块,然后将它们分成一个数组。
Array.from
的参数是类数组对象和转换函数。
转换函数正在进行分块。
关键是首先创建一个新数组,其计算长度类似于:
const array = [];
array.length = Math.ceil(arr.length / size);
这将创建一个length
空插槽的数组。
然后将变换函数应用于此新数组,同时也引用arr
。
因此arr
用于填充新数组。
const chunk = (arr, size) =>
Array.from({ length: Math.ceil(arr.length / size) },
(v, i) => arr.slice(i * size, i * size + size));
console.log(chunk([1, 2, 3], 2));
它会将你的阵列分成几组提供的size
。
Array.from将根据你给他的内容创建一个数组。如果你使用它在函数中使用的方法,它将创建一个具有提供的元素数量的数组。
请在您的控制台中运行:
Array.from({ length: 3 })
它会给你一个包含三个元素的数组。
Array.from的第二个参数用作Array.map。您将函数应用于数组的每个元素。
v
代表元素,i
代表元素的索引。
所以你的map函数会将提供的数组分成组:)
const chunk = (arr, size) =>
{
return Array.from(
{
length: Math.ceil(arr.length / size) // Length of the array to be created
},
(v, i) => arr.slice(i * size, i * size + size) //separate the groups
)
}
Array.from从您提供给它的另一个数组创建一个新数组。上面的函数似乎是从Math.ceil函数创建一个length属性,它的第二个参数是从两个点切割数组,“i * size”是起点,“i * size + size”是终点。
这些参数像map函数一样使用。第一个参数,即长度,由第二个参数(箭头函数)操纵,以创建所需的输出。这里的链接提供了很好的细节:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
以下是一些代码,您可以从中了解Array.from
函数。
Array.from({ length: 5 }, function(val, idx){
return idx
});
这将创建一个[1, 2, 3, 4, 5]
数组