为什么jQuery map会自动将返回的数组平面化

Why jQuery map automatically flattened the returned Array?

本文关键字:返回 数组 平面化 jQuery map 为什么      更新时间:2023-09-26

我是javascript和jQuery的新手。我使用像Scala和Python这样的语言来支持列表推导和Map函数,所以我尝试了jQuery中的Map函数。地图(数组、函数))。

我认为Map函数的一个基本规则是输出的长度应该与输入的长度相同。然而,当我尝试这个:

$.map([1,2,3], function(e){return [1,2,3]})

I got

[1, 2, 3, 1, 2, 3, 1, 2, 3]

代替

[[1, 2, 3], [1, 2, 3], [1, 2, 3]]

这对我来说似乎很奇怪。

有人能解释一下吗?谢谢。

看看jQuery.map 2.1.1的代码,实际上有一条指令来平铺返回的数组。

    // Flatten any nested arrays
    return concat.apply( [], ret );

就是这个结果。jQuery文档也提到了这一点:

 A returned array will be flattened into the resulting array.

然而,没有解释为什么要执行这种扁平化。

,顺便说一句,这与webkit上的ECMAScript 5 map在行为上产生了显著的差异,其中

[1,2,3].map(function(e){return [1,2,3]})

返回
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]

ECMAScript 5在浏览器上的支持在这里是可用的,Array.prototype.map的支持是非常好的整体