什么函数在jQuery中充当.SelectMany()?

Mo *_*our 35 javascript linq jquery

让我解释一下:

我们知道jQuery中的map函数充当.Select()(如在LINQ中).

$("tr").map(function() { return $(this).children().first(); }); // returns 20 tds
Run Code Online (Sandbox Code Playgroud)

现在的问题是我们如何才能在jQuery中使用.SelectMany()?

$("tr").map(function() { return $(this).children(); }); // returns 10 arrays not 20 tds!
Run Code Online (Sandbox Code Playgroud)

这是我的实例:http : //jsfiddle.net/8aLFQ/4/
如果我们有selectMany,"l2"应为8.

[注意]请不要坚持这个例子,上面的代码只是显示我的意思是SelectMany()否则很容易说$("tr").children();

希望它足够清楚.

SLa*_*aks 43

map将展平本机阵列.因此,你可以写:

$("tr").map(function() { return $(this).children().get(); })
Run Code Online (Sandbox Code Playgroud)

您需要调用.get()返回本机数组而不是jQuery对象.

这也适用于常规对象.

var nested = [ [1], [2], [3] ];
var flattened = $(nested).map(function() { return this; });
Run Code Online (Sandbox Code Playgroud)

flattened会平等的[1, 2, 3].


Šim*_*das 25

你要这个:

$("tr").map(function() { return $(this).children().get(); });
Run Code Online (Sandbox Code Playgroud)

现场演示: http ://jsfiddle.net/8aLFQ/12/


Mal*_*lio 5

你要踢自己:

$("tr").map(function() { return [ $(this).children() ]; }); 
Run Code Online (Sandbox Code Playgroud)

这是你珍惜的生活中的简单事物. - Fred Kwan

编辑:哇,这将教我不要彻底测试答案.

手册说map扁平化阵列,所以我认为它会使阵列状物体变平.不,你必须明确地转换它,如下:

$("tr").map(function() { return $.makeArray($(this).children()); }); 
Run Code Online (Sandbox Code Playgroud)

事情应尽可能简单,但并不简单. - 艾尔伯特爱因斯坦