var animals = ["cat","dog","fish"];
var lengths = animals.map(function(c) {
return c.length;
});
console.log(lengths);//[3, 3, 4]
这是代码。我不明白这个' c'争论来自。 我试图将这个参数改为另一个(任何一个词,实际上,在两个地方),并且console.log结果总是相同的!
但是这个' c'没有在任何地方定义!引擎'在哪里?得到这个' c'?
的价值答案 0 :(得分:5)
你问过两个略有不同的问题。首先是质疑机构:
我不明白这个' c'争论来自。我试图将此参数更改为另一个(任何单词,实际上,在两个地方),并且console.log结果始终是相同的!
但是这个' c'没有在任何地方定义! 引擎'在哪里?得到这个' c'?
的价值
您定义参数名称(正如您已注意到的,您可以为自己选择任何名称)。该值来自数组,因为map
会调用您的回调并确定要为该参数传递的参数。
这是Array.prototype.map
的概念性实现,这使得这一点更加清晰:
// CONCEPTUAL ONLY, NOT AN ACTUAL VERSION OF IT
function maplike(array, callback) {
var result = [];
for (var i = 0; i < array.length; ++i) {
result[i] = callback(array[i]);
// ^^^^^^^^--- where 'c' comes from
}
return result;
}
var animals = ["cat","dog","fish"];
var lengths = maplike(animals, function(c) {
return c.length;
});
console.log(lengths);//[3, 3, 4]
&#13;
数组元素默认在JavaScript中有名称吗?
排序,但不是你想的方式。元素的名称是其索引0
,1
等。实际上,JavaScript数组aren't really arrays at all *和那些索引都转换为字符串属性名称(理论上;在实践中, JavaScript引擎优化它。)
* (披露:这是我贫穷的小博客上的帖子)
答案 1 :(得分:4)
你告诉解释器如何调用参数,这里:
function(c) {
^
Array.prototype.map()
需要一个最多可接受3个参数的回调。第一个参数始终是“当前项目”,您恰好将其命名为c
。
要获得更深入的解释,请查看T.J. Crowder s answer 。
答案 2 :(得分:0)
在javascript中,函数是first class object,这意味着它们可以分配给变量,作为函数参数传递并从值返回。 Array.prototype.map
函数接受一个函数,它的第一个参数表示数组的项。调用时,map函数为每个项执行给定的函数,并从给定函数的输出中创建一个新数组。
在您的情况下,您正在地图函数中动态定义输入函数。
您实际上可以在外部定义函数,并通过引用传递函数,如下所示。
function getLength(item) {
return item.length;
}
var animals = ["cat","dog","fish"];
var lengths = animals.map(getLength);
console.log(lengths);//[3, 3, 4]
在这里,您可以看到它输出相同的结果。
答案 3 :(得分:0)
代码不知道命名的参数是什么。您映射一个数组。 map函数在长度变量(被赋值的变量)中创建一个新数组。怎么样?它向其中的函数参数提供当前数组中的每个元素逐个值。 这里的值是实际的字符串名称(&#34; cat&#34;或&#34; dog&#34;或&#34; fish&#34;)。
在javascript中,参数可以是可选的。这个map函数可以带三个参数,currentValue,index,array。在您的情况下,c提供当前值。 如果你要再添加一个参数c,idx。 Map函数将获取其中的currentvalue和index。
var animals = ["cat","dog","fish"];
var lengths = animals.map(function(c, idx, arr, test) {
console.log(c); // currentvalue being processed in the array.
console.log(idx); // index of currentvalue in the array
console.log(arr); // original array being operated on.
console.log(test); // undefined always. not available in map.
return c.length;
});
console.log(lengths);//[3, 3, 4]