将map()与具有两个参数的函数一起使用

时间:2018-06-27 13:32:38

标签: javascript function

我知道我可以将如下所示的函数传递给数组方法.map()

var cities = ["rome", "san francisco", "tokyo"];

var cityLen = cities.map(x => x.length);

console.log(cityLen)

// OUTPUT: [4, 13, 5]

我将一个参数(x)传递给map中的匿名函数,其中x逐渐分配给cities的每个元素。

在下面的代码中,两个参数(di)已传递给匿名函数。

function numberRange (start, end) {
  return new Array(end - start).fill().map((d, i) => i + start);
}

numberRange(10, 20)

// OUTPUT [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

匿名函数中的参数di是什么,如何分配它们?多个参数函数如何与.map()一起使用?

2 个答案:

答案 0 :(得分:2)

如您所见on MDN,用三个参数调用Array#map

  • 当前值
  • 当前索引
  • 被称为对象的对象

这样调用map时,将使用数组及其索引(和数组,但未为其声明参数)中的每个值。


旁注:您可以避免不必要地多次遍历数组(基本上是将fillmapArray.from组合在一起:

return Array.from({length: end - start}, (d, i) => i + start);

Array.from使用当前值和索引调用其回调。

示例:

function numberRange (start, end) {
  return Array.from({length: end - start}, (d, i) => i + start);
}
console.log(numberRange(10, 20));

您还可以通过增加i来避免完全使用start

return Array.from({length: end - start}, () => start++);

示例:

function numberRange (start, end) {
  return Array.from({length: end - start}, () => start++);
}
console.log(numberRange(10, 20));

答案 1 :(得分:2)

除了第二个参数(通常是forEachsomeeverymap的实际元素的索引之外,您可以使用Array.from ,该对象根据具有length属性的对象生成一个数组,并具有用于映射函数的第二个参数。

function numberRange (start, end) {
    return Array.from({ length: end - start}, (_, i) => i + start);
}

console.log(numberRange(10, 20));