1

我试图获得一组数字的总组合值。我将数字作为元素标签中的文本获取,将它们存储在数组中,然后将它们全部加在一起。我的问题是它没有将数字成对插入数组中。它将它们作为单个整数添加。做错了什么。检查jsfiddle也看例子

http://jsfiddle.net/Wd78j/

var z = $('.impressions').text();
var x = [];
for(var i = 0; i < z.length; i++){
    x.push(parseInt(z[i]));
}
console.log(x);

var total = 0;
$.each(x,function() {
    total += this;
});
$('#impressTotals').append("[Total:" +total + "]");
$('#array').append("[Array:"+x+"]");
4

3 回答 3

4

当您获得文本时,它会获取所有数字并将它们连接成一个字符串。下面的内容一次取一个元素并推送它。

var x = [];

$('.impressions').each( function( ) {
    var z = $(this).text();
    x.push(parseInt(z, 10));
})

当然,您可以在该each函数中构建 sum up,但我这样做是为了更紧密地反映您的代码。

于 2013-06-05T16:36:02.450 回答
1

text()返回所有印象元素的串联文本,您将其中的每个字符加在一起。

您希望遍历每个印象元素,并保持运行总和。像这样的东西应该工作

var sum = 0;
$('.impressions').each(function(){
   sum = sum + (+$(this).text());
});

更新小提琴


或者保持原始结构(不要忘记 parseInt 的 radix 参数):

var z = $('.impressions');
var x = [];
z.each(function(){
    x.push(parseInt($(this).text(), 10));
});
console.log(x);

var total = 0;
$.each(x,function() {
    total += this;
});
$('#impressTotals').append("[Total:" +total + "]");
$('#array').append("[Array:"+x+"]");

更新的小提琴

于 2013-06-05T16:34:15.583 回答
0

您正在迭代一个字符串,$.map如果需要,您可以只使用它来构建数组,否则只需迭代并总结这些值:

var x     = $.map($('.impressions'), function(el,i) {return parseInt($(el).text(), 10);}),
    total = 0,
    n     = x.length;

while(n--) total += x[n] || 0;

$('#impressTotals').append("[Total:" +total + "]");
$('#array').append("[Array:"+x+"]");

小提琴

于 2013-06-05T16:41:27.380 回答