如何编写JavaScript数组.from()映射函数?
我正在用vanilla JS和HTML/CSS在浏览器中构建一个俄罗斯方块游戏。我下面的教程将网格视为二维矩阵,并使用以下代码段将其初始化为充满零:如何编写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循环做相同的工作吗?如果是,这段代码
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
可以输入两种不同类型的tofrom
作为第一个参数:
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
可以输入两种不同类型的tofrom
作为第一个参数:
console.log({length:number}:',Array.from({length:2}));
console.log(“[…,…]:”,Array.from([1,2]);
这将尝试调用未定义的上的填充(0)
。这将尝试调用未定义的上的填充(0)
。