2013-06-05 107 views
1

我试图得到一组数值的总合计值。 Im将数字作为元素标签中的文本存储在一个数组中,然后将它们全部加在一起。我的问题是,它没有将数字作为成对插入到数组中。它将它们作为单个整数添加,这是什么错误。 检查的jsfiddle太见例如JavaScript存储数组值

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+"]"); 

回答

1

text()回报的所有展示内容,其中你的每个字符相加的级联文本。

您想遍历每个展示元素,并保持运行的总和。像这样的东西应该工作

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

Updated Fiddle


,或保持原来的结构(不要忘记基数参数parseInt函数):

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+"]"); 

Updated fiddle

+1

它实际上回报根据'console.log(z)',整个集合的文本作为一个字符串。 – Mathletics

+0

@Mathletics - 事实上 - 当我看着他的小提琴时,我看到了这一点。愚蠢的我假设'.text'只会返回第一个元素的文本,就像所有其他的jQuery函数一样...... :) –

+1

我从来没有见过一元+以前用过这种方式。油滑。 –

4

当你获得文本时,它将采取所有数字并连接他们成一个字符串。下面是每个元素一个一个地推送它。

var x = []; 

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

当然,你可以建立的总结是each功能里面,但我做到了,这样更密切地反映你的代码。

+1

+1 - 希望你不介意,我调整了你的parseInt电话,虽然:) –

+0

谢谢,好电话! – n00dle

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+"]"); 

FIDDLE