Adr*_* P. 2 javascript arrays jquery loops object
我正在为一种非常复杂的发票方法计算税款。我无法解释整个过程,但如果您有任何问题,我会尽我所能回答。
我在 JS 中提出了一组对象:
[
{row_id: "20003859", expense_id: "429", tax_select: "tax1", tax_id: "1", tax_name: "GST 5%", tax_no: "", tax_value: "13.23"},
{row_id: "20003859", expense_id: "429", tax_select: "tax2", tax_id: "3", tax_name: "QST 9.975%", tax_no: "", tax_value: "26.38"},
{row_id: "20003840", expense_id: "409", tax_select: "tax1", tax_id: "1", tax_name: "GST 5%", tax_no: "", tax_value: "13.23"},
{row_id: "20003840", expense_id: "409", tax_select: "tax2", tax_id: "3", tax_name: "QST 9.975%", tax_no: "", tax_value: "26.38"},
{row_id: "20003870", expense_id: "419", tax_select: "tax1", tax_id: "2", tax_name: "HST 13%", tax_no: "", tax_value: "34.39"}
]
Run Code Online (Sandbox Code Playgroud)
如您所见,我有 3 个 tax_id:1、2 和 3。我可以有很多,但为了简单起见,我只放了 3 个。
我需要遍历这个对象数组,并提出另一个对象数组,其总数按 tax_id:
[
{tax_name: "GST 5%", total_tax: sum of tax_value for tax_id = 1},
{tax_name: "QST 9.975%", total_tax: sum of tax_value for tax_id = 3},
{tax_name: "HST 13%", sum of tax_value for tax_id = 2}
]
Run Code Online (Sandbox Code Playgroud)
之后,我可以遍历这个数组并显示每个税的总计,添加小计并显示总发票。
另外,我应该按 tax_select 对它们进行排序,但这是我可以接受的。
我曾尝试:其中 selected_taxes 是第一个对象数组
for (i = 0; i < selected_taxes.length; i++){
var sum = 0;
$.each( selected_taxes[i], function( tax_id, tax_value ) {
sum += tax_value;
});
console.log(sum);
}
Run Code Online (Sandbox Code Playgroud)
但没有运气。
非常感谢您的帮助或建议。
我认为这Array.prototype.reduce将是您最好的选择:
var totals = data.reduce(function(c,x){
if(!c[x.tax_id]) c[x.tax_id] = {
tax_name: x.tax_name,
tax_id: x.tax_id,
total_tax: 0
};
c[x.tax_id].total_tax += Number(x.tax_value);
return c;
}, {});
Run Code Online (Sandbox Code Playgroud)
这种方法会生成一个对象,该对象的属性是税号。如果你真的想要一个平面数组,你可以事后将它转换成一个数组:
var totalsArray = [];
for(var taxId in totals){
totalsArray.push(totals[taxId]):
}
Run Code Online (Sandbox Code Playgroud)
演示:http : //jsfiddle.net/3jaJC/1/
| 归档时间: |
|
| 查看次数: |
3095 次 |
| 最近记录: |