使用jQuery .each()函数设置数组?

时间:2012-02-04 21:16:55

标签: jquery arrays function indexing each

我正在尝试通过jQuery的.each()函数设置一个数组,但似乎我没有正确地执行它?

我在html中有属性,例如:

<div class="cheers" data-fname = "fname" data-lname="lname">some ish..</div><!-- going through a while loop!-->

然后我有一个jquery函数做类似的事情

var arrayMe = [];
$(".cheers").each(function(index){
    arrayMe[index] = $(".cheers").attr('data-fname')+","+$(".cheers").attr('data-lname');
});

然后,当我尝试做各种警报时:

alert(arrayMe); //this gives me the fname,lname
alert(arrayMe[0]); //this gives me the first fname,lname in the array
alert(arrayMe[0][1]); //this SUPPOSED to give me the first lname, but it gives me a letter...

5 个答案:

答案 0 :(得分:6)

您必须使用arrayMe[1]代替arrayMe[0][1]

你收到一封信,因为arrayMe[0]是一个字符串,arrayMe[0][1]检索给定字符串的第二个字符。它相当于arrayMe[0].charAt(1)

如果要构建2D数组,请使用:

var arrayMe = [];
$(".cheers").each(function(index){
    var $this = $(this);
    arrayMe[index] = [$this.attr('data-fname'),
                      $this.attr('data-lname')];
});
alert(arrayMe);        // Array. Shows all pairs, eg: [['fname', 'lname'], ...]
alert(arrayMe[0]);     // Array. Shows first pair, eg: ['fname', 'lname']
alert(arrayMe[0][0]);  // String. fname            eg:  'fname'
alert(arrayMe[0][1]);  // String. lname            eg:           'lname'

(我还修改了代码中的另一个问题,将$('.cheers')替换为$(this)

答案 1 :(得分:1)

如果要分别访问fname和lname,请将它们放在一个数组中:

var arrayMe = [];
$(".cheers").each(function(index){
    arrayMe[index] = [$(this).attr('data-fname'),$(this).attr('data-lname')];
});

此外,$(this).attr会为您提供当前元素的属性,其中$(".cheers").attr将始终为您提供第一个元素的属性

答案 2 :(得分:1)

这个怎么样:

var arrayMe = $(".cheers").map(function() {
    return [[ $(this).data('fname'), $(this).data('lname') ]];
}).get();

请参阅squint的注释,以解释为什么需要双返回数组。

答案 3 :(得分:0)

从我可以看到你没有将值添加到数组中,而是添加到存储在arrayMe [index]中的字符串中。

在存储到数组中时尝试使用以实现我认为您想要的内容:

var arrayMe = [];
$(".cheers").each(function(index){
    arrayMe[index][0] = $(".cheers").attr('data-fname');
    arrayMe[index][1] = $(".cheers").attr('data-lname');
});

答案 4 :(得分:0)

您必须将代码更改为:

arrayMe[index] = [$(".cheers").attr('data-fname'), $(".cheers").attr('data-lname')];