[英]javascript sum value in loop group by attribute
I have 2 types of rows (Basic and Extra). 我有2种类型的行(基本行和附加行)。 I need SUM of input values group by attribute "data-type" 我需要按属性“数据类型”分组的输入值的总和
<div class="row-item" data-type="Basic"><input type="number" value="2" class="number-input"></div>
<div class="row-item" data-type="Basic"><input type="number" value="5" class="number-input"></div>
<div class="row-item" data-type="Basic"><input type="number" value="3" class="number-input"></div>
<div class="row-item" data-type="Basic"><input type="number" value="4" class="number-input"></div>
<div class="row-item" data-type="Extra"><input type="number" value="3" class="number-input"></div>
<div class="row-item" data-type="Extra"><input type="number" value="5" class="number-input"></div>
and I need ie object of arrays: 我需要数组的对象:
Basic => sum : 14,
Extra => sum : 8
I tried something but it does not works ... 我尝试了一些东西,但没有用...
data = {};
$(".row-item").each(function (index, elem) {
var type = $(elem).data('type');
count = $(elem).find(".number-input").val();
sum += count;
data[type] = {
sum: sum
};
});
You can use data-type
values in selector to select specific value. 您可以在选择器中使用data-type
值来选择特定的值。
var basic = 0;
$('.row-item[data-type="Basic"]').each(function () {
basic += parseInt($(this).find('input').val(), 10) || 0;
});
var extra = 0;
$('.row-item[data-type="Extra"]').each(function () {
extra += parseInt($(this).find('input').val(), 10) || 0;
});
alert(basic + ' ' + extra);
Demo: http://jsfiddle.net/tusharj/773va00j/ 演示: http : //jsfiddle.net/tusharj/773va00j/
EDIT 编辑
var obj = {
Basic: 0,
Extra: 0
};
$('.row-item[data-type]').each(function () {
obj[$(this).data('type')] += parseInt($(this).find('input.number-input').val(), 10);
});
console.log('Basic ' + obj.Basic);
console.log('Extra ' + obj.Extra);
Demo: http://jsfiddle.net/tusharj/773va00j/1/ 演示: http : //jsfiddle.net/tusharj/773va00j/1/
Another approach would be the following. 另一种方法如下。 This would also allow you to have more types if need be. 如果需要的话,这还将允许您拥有更多的类型。
var data = {}; $(".row-item").each(function(index, elem) { var type = $(elem).data('type'); var count = parseInt( $(elem).find(".number-input").val(), 10 ); if (data.hasOwnProperty(type)) { data[type]["sum"] += count; } else { data[type] = {"sum": count}; } }); alert (JSON.stringify(data, null, 4)); //console.log(data);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="row-item" data-type="Basic"><input type="number" value="2" class="number-input"></div> <div class="row-item" data-type="Basic"><input type="number" value="5" class="number-input"></div> <div class="row-item" data-type="Basic"><input type="number" value="3" class="number-input"></div> <div class="row-item" data-type="Basic"><input type="number" value="4" class="number-input"></div> <div class="row-item" data-type="Extra"><input type="number" value="3" class="number-input"></div> <div class="row-item" data-type="Extra"><input type="number" value="5" class="number-input"></div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.