Javascript 为什么jQuery映射会自动展平返回的数组?
我是javascript和jQuery的新手。 我使用Scala和Python等支持列表理解和映射函数的语言,所以我在jQuery($.Map(array,func))中尝试了映射函数 我认为Map函数的一个基本规则是输出的长度应该与输入的长度相同。然而,当我尝试这一点时:Javascript 为什么jQuery映射会自动展平返回的数组?,javascript,jquery,Javascript,Jquery,我是javascript和jQuery的新手。 我使用Scala和Python等支持列表理解和映射函数的语言,所以我在jQuery($.Map(array,func))中尝试了映射函数 我认为Map函数的一个基本规则是输出的长度应该与输入的长度相同。然而,当我尝试这一点时: $.map([1,2,3], function(e){return [1,2,3]}) 我得到 [1, 2, 3, 1, 2, 3, 1, 2, 3] 而不是 [[1, 2, 3], [1, 2, 3], [1, 2,
$.map([1,2,3], function(e){return [1,2,3]})
我得到
[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 5map
在行为上产生了显著的差异,其中
[1,2,3].map(function(e){return [1,2,3]})
返回
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
ECMAScript 5在浏览器上的支持是可用的,并且对
Array.prototype.map
的支持总体上是非常好的这是设计的,上面提到了它,有时它非常有用。这很酷!因此,基本上我可以使用数组的函数而不是jQuery的oneYes,但在支持ECMAScript 5的浏览器上,只需检查这一点