Jquery 如何将相同的值收集到JSON对象中?
我有以下格式的多个输入:Jquery 如何将相同的值收集到JSON对象中?,jquery,arrays,json,Jquery,Arrays,Json,我有以下格式的多个输入: <input type='text' class='i_skema_qty' id='skema_1_bbg' value='1000' /> <input type='text' class='i_skema_qty' id='skema_1_acg' value='700' /> <input type='text' class='i_skema_qty' id='skema_2_bbg' value='1200' /> <
<input type='text' class='i_skema_qty' id='skema_1_bbg' value='1000' />
<input type='text' class='i_skema_qty' id='skema_1_acg' value='700' />
<input type='text' class='i_skema_qty' id='skema_2_bbg' value='1200' />
<input type='text' class='i_skema_qty' id='skema_3_bbg' value='1700' />
<input type='text' class='i_skema_qty' id='skema_2_acg' value='1540' />
<input type='text' class='i_skema_qty' id='skema_1_spm' value='900' />
<input type='text' class='i_skema_qty' id='skema_2_spm' value='300' />
//CONTAINER
<input type='text' class='i_grand_total' id='total_bbg' />
<input type='text' class='i_grand_total' id='total_acg' />
<input type='text' class='i_grand_total' id='total_spm' />
阵列中的单元\u kerja
根据输入动态变化。然而,它总是大于零。然后,数组应该插入到与数组计数匹配的i_grand_total
容器中
这是我当前的脚本,我被困在这里:
var grand_total = 0;
$('.i_skema_qty').each(function(i){
var _this_ttl = $(this);
var total_item = parseFloat( _this_ttl.val().replace(',', '') );
var arr_uk_skema = _this_ttl.attr('id').split('_');
var uk_skema = arr_uk_skema[2];
grand_total = grand_total + total_item;
alert(uk_skema +":"+ grand_total);
});
我将简化为一个由
unit\u kerja
索引的对象,其值是数组对象,例如{“unit\u kerja”:“bbg”,“total”:“3900”}
。迭代每个i_skema_qty
,如果对象尚不存在,则在累加器中创建该对象,并添加到总数中。然后,获取对象的值以将其转换回数组,并映射以将total
转换为字符串而不是数字:
const group=[…$('.i_skema_qty')]
.减少((a,输入)=>{
const key=input.id.match(/[a-z]+$/)[0];
如果(!一个[键]){
a[key]={unit_kerja:key,总计:0};
}
a[key].total+=Number(输入.value);
返回a;
}, {});
常量输出=对象值(分组)
.map(obj=>({…obj,total:String(obj.total)});
控制台日志(输出)代码>
Hi@当然,谢谢你的回答。但是,我不熟悉您的代码。我使用的是jquery的旧版本。我希望你能根据你的代码修改我当前的代码。对不起,我的英语不好。我在这里使用的唯一jQuery是$('.I_skema_qty')
-其他所有东西都是内置的Javascript,别担心,任何版本的jQuery都可以很好地工作(你甚至可以很容易地从脚本中删除jQuery,只需将$
替换为querySelectorAll
)
var grand_total = 0;
$('.i_skema_qty').each(function(i){
var _this_ttl = $(this);
var total_item = parseFloat( _this_ttl.val().replace(',', '') );
var arr_uk_skema = _this_ttl.attr('id').split('_');
var uk_skema = arr_uk_skema[2];
grand_total = grand_total + total_item;
alert(uk_skema +":"+ grand_total);
});