.map()每次迭代返回一次还是在所有迭代完成后返回一次?

时间:2017-12-10 00:12:30

标签: javascript

我试图学习.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);




2 个答案:

答案 0 :(得分:3)

  

问题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;
};

(此实现是一种简化。real Array.prototype.map还有其他一些功能。)

答案 1 :(得分:1)

是的输出在每次迭代开始时设置为空数组,返回值定义当前元素的新值。