如何编写JavaScript数组.from()映射函数?

如何编写JavaScript数组.from()映射函数?,javascript,arrays,arrow-functions,Javascript,Arrays,Arrow Functions,我正在用vanilla JS和HTML/CSS在浏览器中构建一个俄罗斯方块游戏。我下面的教程将网格视为二维矩阵,并使用以下代码段将其初始化为充满零: return Array.from( {length : ROWS}, () => Array(COLS).fill(0) ); 我希望得到一个解释,说明这个代码片段是如何实现这一点的。我理解第二个参数是一个用0填充数组的箭头函数,但我并不真正理解第一部分。这段代码本质上与for循环做相同的工作吗?如果是,这段代码

我正在用vanilla JS和HTML/CSS在浏览器中构建一个俄罗斯方块游戏。我下面的教程将网格视为二维矩阵,并使用以下代码段将其初始化为充满零:

   return Array.from(
       {length : ROWS}, () => Array(COLS).fill(0)
   );
我希望得到一个解释,说明这个代码片段是如何实现这一点的。我理解第二个参数是一个用0填充数组的箭头函数,但我并不真正理解第一部分。这段代码本质上与for循环做相同的工作吗?如果是,这段代码可以被替换吗


抱歉,如果这个问题不合适,我找不到确切的副本,而且由于我不理解,我不确定如何用谷歌搜索这个问题。

我相信您的代码片段缺少一些部分
Array.from()
是一个函数,可以从iterable对象生成数组,然后可以通过数组进行映射。 我想应该是这样的

Array.from({length : ROWS}).map((item) => {item.fill(0)))
您可以在此处阅读mozzilla文档中有关Array.from()的更多信息:


和Array.map()在这里:

我认为您的代码片段缺少一些部分
Array.from()
是一个函数,可以从iterable对象生成数组,然后可以通过数组进行映射。 我想应该是这样的

Array.from({length : ROWS}).map((item) => {item.fill(0)))
您可以在此处阅读mozzilla文档中有关Array.from()的更多信息:


和Array.map()此处:

Array.from
是一种静态方法,它允许您从类似数组或可编辑对象创建一个新的浅拷贝
Array
实例

在您的示例中,第一个参数只是一个对象本身。
Array.from
实际做的是在第一个参数上查找
.length
属性(如果它是一个数组,这是显而易见的,但是任何iterable对象都有
.length
属性)

这个例子有点像是一种欺骗,它不是传递一个实际有意义的iterable对象,而是传递一个空对象,而是将
.length
属性指定为行数

由于对象有一个
.length
属性(即使它实际上只包含了
属性),因此
数组.from
方法知道如何处理它

如果您想要等效的东西,可以使用for循环,如您所述:

var newArray = [[]]

for (var i = 0; i < ROWS; i++) {
  for (var j = 0; j < COLS; j++) {
    newArray[i][j] = 0
  }
}
var newArray=[]]
对于(变量i=0;i

他们的方法更简捷、更简洁。

Array.from
是一种静态方法,允许您从类似于数组或可编辑的对象创建一个新的、浅拷贝的
Array
实例

在您的示例中,第一个参数只是一个对象本身。
Array.from
实际做的是在第一个参数上查找
.length
属性(如果它是一个数组,这是显而易见的,但是任何iterable对象都有
.length
属性)

这个例子有点像是一种欺骗,它不是传递一个实际有意义的iterable对象,而是传递一个空对象,而是将
.length
属性指定为行数

由于对象有一个
.length
属性(即使它实际上只包含了
属性),因此
数组.from
方法知道如何处理它

如果您想要等效的东西,可以使用for循环,如您所述:

var newArray = [[]]

for (var i = 0; i < ROWS; i++) {
  for (var j = 0; j < COLS; j++) {
    newArray[i][j] = 0
  }
}
var newArray=[]]
对于(变量i=0;i

他们的方法更简洁明了。

来自的数组可以接收3个参数,并为您创建一个新的数组实例

  • arrayLike:arrayLike
  • mapfn:(v:T,k:number)=>U
  • thisArg?:任何
阵列式

arrayLike有一个构造函数,可以接收两个不同的参数:

  • 只读长度:数字
  • 只读[n:编号]:T
可以输入两种不同类型的to
from
作为第一个参数:

console.log({length:number}:',Array.from({length:2}));

console.log(“[…,…]:”,Array.from([1,2]);
Array-from可以接收3个参数并创建一个新的数组实例

  • arrayLike:arrayLike
  • mapfn:(v:T,k:number)=>U
  • thisArg?:任何
阵列式

arrayLike有一个构造函数,可以接收两个不同的参数:

  • 只读长度:数字
  • 只读[n:编号]:T
可以输入两种不同类型的to
from
作为第一个参数:

console.log({length:number}:',Array.from({length:2}));

console.log(“[…,…]:”,Array.from([1,2]);
这将尝试调用
未定义的
上的
填充(0)
。这将尝试调用
未定义的
上的
填充(0)