2

我想要数组数组。

我的代码:

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

但是当我有两个 post-entry 元素并且每个元素都有 4 个图像时,我有 8 个图像的数组。我怎样才能得到两个元素的数组,每个元素有 4 个元素?为什么我有平面阵列?

JSFIDDLE

4

2 回答 2

6

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

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

因此,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();
于 2013-10-03T13:30:02.323 回答
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(); 

});

这是一个小提琴

于 2013-10-03T13:30:43.403 回答