我正在尝试学习.map()
方法背后的机制。
问题1)在下面的测试代码中,.map()
中的第一个语句是let output = [];
。 输出是否在每次迭代开始时重置为空数组?
问题2).map()
中的最后一条语句是return output;
.map()
每次迭代结束时返回一个输出值(在本例中为 3 返回),还是存储所有迭代的输出并在所有迭代完成后返回一个新的、完整的数组?
非常感谢您的任何帮助!
"use strict";
var creatureArray, updatedCreatureArray;
creatureArray = [
['zombie', 30, 1, 'bite', 0, 5],
['skeleton', 10, 2, 'sword', 1, 10],
['orc', 15, 4, 'club', 1, 7]
];
updatedCreatureArray = creatureArray
.map((value) => {
let output = [];
output = ['species'].concat(value);
output[6] += 100;
return output;
});
console.log(updatedCreatureArray);
问题 1)在下面的测试代码中,
.map()
中的第一个语句是let output = [];
。输出是否在每次迭代开始时重置为空数组?
传递给.map()
的函数将output
声明为局部变量,因此其值不会在迭代之间共享。它将始终从一个空数组开始,然后在迭代结束时超出范围。
问题 2)
.map()
中的最后一条语句是return output;
.map()
是在每次迭代结束时返回一个输出值(在本例中为 3 返回),还是存储所有迭代的输出并在所有迭代完成后返回一个新的、完整的数组?
一个函数如果被调用一次,它只能返回一次,.map()
也不例外。在所有迭代完成之前,它不会返回。.map()
的返回值是使用原始数组中的每个元素执行函数参数时产生的所有返回值的数组。
如果您看到如何实现.map()
,也许这会更清楚:
Array.prototype.map = function(callback) {
const result = [];
for (let i = 0; i < this.length; i++) {
result[i] = callback(this[i], i, this);
}
return result;
};
(此实现是一种简化。真正的Array.prototype.map
还有其他一些功能。
yes 输出在每次迭代开始时设置为空数组,返回值定义当前元素的新值。