map map在jQuery中返回平面数组

时间:2013-10-03 13:17:50

标签: javascript jquery arrays

我想拥有数组数组。

我的代码:

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个图像的数组。如何获得每个包含4个元素的两个元素的数组?为什么我得到扁平阵列?

JSFIDDLE

2 个答案:

答案 0 :(得分:6)

那是因为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();

答案 1 :(得分:2)

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

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

});

Here's a fiddle