Array.map的概念是什么?

我在理解Array.map的概念时遇到了问题。 我确实去过Mozilla和Tutorials Point,但他们提供的信息非常有限。

这就是我使用Array.map 。 它有点复杂(涉及一点d3.js;只是忽略它)

 var mapCell = function (row) { return columns.map(function(column) { return { column : column, value : getColumnCell(row, column) } }) } //getColumnCell is a function defined in my code //columns is array defined at the top of my code 

我不明白这段代码到底在做什么。 我知道它返回了一个新arrays和东西,但这部分有点棘手!

如果你想通过我的代码: http : //jsfiddle.net/ddfsb/2/

更新1

我正在使用控制台来实际了解代码中发生的事情。 看看提供的答案,我已经清楚地理解了array.map的概念。 现在剩下的唯一部分是参数行和列,但行和行之间存在差异,并且提供的小提琴中的列和列

 var rows//completely ok var columns//completely ok funcion(row)//here,source of row is unknown.getColumncell function utilizes this parameter further making it more critical function(column)//source of column is unknown..getColumncell function utilizes this parameter further making it more critical 

任何帮助?

让我们重写一下,然后从内到外开始工作。

 var mapCell = function (row) { return columns.map( function(column) { return { column : column, value : getColumnCell(row, column) } } ) } 

function(column)部分本质上是一个以列作为参数的函数,并返回一个具有两个属性的新对象:

  • 列,即参数的原始值,和
  • value,即在行(外部变量)和列(参数)上调用getColumnCell函数的结果

Array.map columns.map()部分调用Array.map函数,它接受一个数组和一个函数,并为它的每个最后一项运行函数,并返回结果。 即如果输入是数组[1, 2, 3, 4, 5]并且函数类似于isEven ,则结果将是数组[false, true, false, true, false] 。 在您的情况下,输入是列,输出是对象列表,每个对象都有一个列和一个值属性。

最后, var mapCell = function (row)部分声明变量mapCell将包含一个名为row变量的函数 – 这与内部函数中使用的row相同。

在一行中,这行代码声明了一个函数,该函数在运行时将占用一行并返回该行的所有列的值。

理解map函数只是解决方案的一部分,还有mapCell函数。 它需要一个参数row ,它返回如下内容:

 [ { "column": "parties", "value": [cell value] }, { "column": "star-speak", "value": [cell value] } ] 

单元格值取决于row和列(派对,星级说话等)

map函数将变换应用于值,并返回该变换后的值。

一个简单的例子:

 function square(x) { return x * x; } [ 2, 3, 4 ].map(square); // gives: [ 4, 9, 16 ] 

同理:

 [ "parties", "starspeak" ].map(function (column) { return { column: column, value: findTheValue(column) } }); 

现在,因为该映射嵌套了一个获取row参数的函数。 您可以在map函数中使用它来获取:

 function (row) { return [ "parties", "starspeak" ].map(function (column) { return { column: column, value: findTheValue(row, column) } }); } 

这非常接近你的代码。

map循环遍历原始数组,并为数组中的每个值调用方法。 它收集函数的结果以创建包含结果的新数组。 您正在将值数组“映射”为新的映射值数组。 您的代码相当于:

 var mapCell = function (row) { var result = []; for (var i = 0; i < columns.length; ++i) { var mappedValue = { column: columns[i], value : getColumnCell(row, columns[i]) }; result.push(mappedValue); } return result; }; 
 Map function goes through each element of an array in ascending order and invokes function f on all of them. It returns new array which is being computed after function is invoked on it. Ref: http://www.thesstech.com/javascript/array_map_method Syntax array.map(f) Example:       Answer: 8,10,12 Ref: http://www.thesstech.com/tryme?filename=javascript_array_map_method 

可能大多数人来到这里(像我一样)只是想要一个基本的array.map用法示例:

 myArray = [1,2,3] mappedArray = []; mappedArray = myArray.map(function(currentValue){ return currentValue *= 2; }) //myArray is still [1,2,3] //mappedArray is now [2,4,6] 

这是它最基本的。 有关其他参数,请查看: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Interesting Posts