在jQuery的each循环中创建多维数组或对象

3

这是我得到的并且花了几个小时来挣扎。如果我在每个循环中使用 alert(i),它会给我返回 1,2,3...,但是如果我想要将其作为多维数组的键,它就像一个字符串 "i"

$(document).ready(function(){
    var positions=[];

    $( ".box" ).each(function(i) {
        //alert(i);
        var elPositions = {};
        elPositions.i = $(this).offset().top;
        positions.push(elPositions);
        //$elPosArray[i] = $(this).offset().top;
        //$(this).html('outer height--> ' + $(this).outerHeight(true));
    });
    console.log(positions);
    //console.log(el);
});

这个话题有很多问题和回答,但是没有一个能帮我解决问题。

我想要得到一个类似于以下样式的数组或对象:

   positions[0]['offset'] = '120';
   positions[0]['height'] = '300';
   positions[1]['offset'] = '420';
   positions[1]['height'] = '180';
   positions[2]['offset'] = '600';
   positions[2]['height'] = '100';
   positions[3]['offset'] = '700';
   positions[3]['height'] = '300';

这是一个包含HTML的Fiddle示例,链接为http://jsfiddle.net/Z9WrG/
1个回答

7

你已经接近成功了!

在你的循环中,elPositions(这里重命名为data)会在每次迭代时重新创建,并带有连续的索引被推入数组中。不需要在数据对象中指定 i,因为当你将其推入数组时,i会自动分配。

请参见更新后的示例:http://jsfiddle.net/Z9WrG/2/

代码如下:

$(document).ready(function(){
    var positions=[];

    $( ".box" ).each(function() {
        var $this = $(this);
        var data = {};

        data.offset = $this.offset().top;
        data.height = $this.height();

        positions.push(data);
        // Now, positions[iteration_index] = { offset: x, height: y }
    });

    console.log(positions);
    console.log(positions[0].height);
    console.log(positions[0].offset);
});

我知道,我知道,在这里不应该说谢谢。但是还是要感谢ZOUGEN :-) 太棒了,也感谢他告诉我哪里做错了! - caramba
@caramba - 在评论中感谢别人的帮助没有任何问题 ;) 一般来说,不要在问题的结尾处添加感谢,以使其尽可能清晰简洁。 - webnoob
@Josh Harrison 非常感谢。 - whitesiroi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接