简体   繁体   English

循环属性中的javascript sum值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM