map map在jQuery中返回平面数组

我想要数组数组。

我的代码:

image_data = $('.post-entry').map(function() { return $(this).find('img').map(function() { var self = $(this); return { big: self.hasClass('big') || self.hasClass('medium'), offset: self.offset(), width: self.width(), height: self.height() }; }).get(); }).get(); 

但是当我有两个后置元素并且每个有4个图像时,我有8个图像的arrays。 如何获得每个包含4个元素的两个元素的数组? 为什么我得到扁平arrays?

的jsfiddle

那是因为map()的文档说(强调我的):

该函数可以返回要插入到结果集中的单个数据项或数据项数组如果返回数组,则将数组内的元素插入到集合中

因此, map()展开您返回的数组,这种行为是设计使然。

尝试将这些数组包装到另一个数组中,因为我相信map()只会展平一次:

 image_data = $('.post-entry').map(function() { return [ $(this).find('img').map(function() { var self = $(this); return { big: self.hasClass('big') || self.hasClass('medium'), offset: self.offset(), width: self.width(), height: self.height() }; }).get() ]; }).get(); 

您可以创建一个空数组,然后为每个包含img对象的post-entry添加索引。 我怀疑可能有更好的方法来做到这一点,但是:

 var image_data = []; $('.post-entry').each(function(i) { image_data[i] = $(this).find('img').map(function() { var self = $(this); return { big: self.hasClass('big') || self.hasClass('medium'), offset: self.offset(), width: self.width(), height: self.height() }; }).get(); }); 

这是一个小提琴