不能真正理解这个功能

问题描述 投票:-1回答:4

我真的无法理解这个使用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));
javascript arrays ecmascript-6
4个回答
0
投票

它将一个数组切成大小为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));

0
投票

它会将你的阵列分成几组提供的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
    )
}

0
投票

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


0
投票

以下是一些代码,您可以从中了解Array.from函数。

Array.from({ length: 5 }, function(val, idx){
   return idx
});

这将创建一个[1, 2, 3, 4, 5]数组

© www.soinside.com 2019 - 2024. All rights reserved.