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(); });