Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何计算自定义值的和_Javascript_Jquery - Fatal编程技术网

Javascript 如何计算自定义值的和

Javascript 如何计算自定义值的和,javascript,jquery,Javascript,Jquery,我有这样一个产品表: 正如我在图中提到的,我指定了一个名为VAT的字段,它代表增值税,我需要所有VAT字段的总和用jQuery显示在页面上,下面是我的尝试: var total_price = parseInt($('#total-price').html().replace(/\,/g,'')); $('#total-price').html(parseInt(total_price + (price*cnt)).toLocaleString()); var total_discount

我有这样一个产品表:

正如我在图中提到的,我指定了一个名为VAT的字段,它代表增值税,我需要所有VAT字段的总和用jQuery显示在页面上,下面是我的尝试:

var total_price =  parseInt($('#total-price').html().replace(/\,/g,''));
$('#total-price').html(parseInt(total_price + (price*cnt)).toLocaleString());

var total_discount =  parseInt($('#total-discount').html().replace(/\,/g,''));
$('#total-discount').html(parseInt(total_discount + (discount*cnt)).toLocaleString());
                
var total_final =  parseInt($('#total-final').html().replace(/\,/g,''));
$('#total-final').html(parseInt(total_final + (price_final*cnt)).toLocaleString());

var total_vat =  parseInt($('#total-vat').html().replace(/\,/g,''));
$('#total-vat').html(parseInt(total_final + (price_final*cnt) + value_added_tax).toLocaleString());
这些变量的结果如下:

但现在的问题是,
VAT之和
返回与
total final
相同的值。因此,它应该显示13286000,而不是12350,00(因为
增值税
的总和必须添加到
总额

进行此计算的线如下:

$('total vat').html(parseInt(total final+(price final*cnt)+增值税).toLocaleString())

这里少了点什么,或者我做得不对。因此,如果您知道如何正确计算产品的最终价格(
total\u final
+
value\u added\u tax
),请让我知道

我非常感谢你们的任何想法或建议


提前感谢。

从HTML读取数据非常慢,更好的方法是也将数据存储在数组中,然后从该数组读取值以计算VAT。一旦你有了号码,你就可以使用jQuery将其写入页面。

动态列添加

当您运行代码段时,它将向您的图像显示一个相同的表,并汇总总数。“价格”总额将是价格列的总计,并加上增值税。如果列的顺序发生变化,索引将在代码的第一行中定义

我已经展示了一种方法,可以动态地将任意大小的表上的列与任意数量的行相加。唯一的硬编码元数据是确定第1列为价格总额,第2列为总计中第1列要添加的增值税。如果你愿意,我很乐意解释任何代码

您会注意到,循环忽略了第一个tr,因为它没有
(它使用
)-但是您的表可能没有这样设置,并且/或者您的数据顶部可能没有标题行。如果确实需要计算第一行,则可以取消注释
if(row_index!==0){
部分

请看一看,让我知道这是否需要调整

const rows=$(“#table tr”),
finalIndex=0,//第1列为最终列
vatIndex=1,//第2列是VAT
priceIndex=3//第4列是价格
让计数=[];
行。每个(函数(行索引){
$(this).find('td')。每个(函数(col_索引){
if(row_index==rows.length-1){
//得到总数
if(col_index==finalIndex)$(this.html((tally[priceIndex]+tally[vatIndex]).toLocaleString())
else$(this.html(tally[col_index].toLocaleString())
}否则{
//如果(行索引!=0){
tally[col_index]=(tally[col_index]| 0)+(数字($(this).text().replace(/,/g',)| 0);
// }
}
})
})
#表{
边框:1px实心#ccc;
}
#表td,
#表th{
边框底部:1px实心#ccc;
左边框:1px实心#ccc;
填充:10px;
字体系列:“Arial”;
颜色:#666;
文本对齐:居中;
}
#表td:第一个孩子,
#表th:第一个孩子{
左边界:无;
}
tr#总计td{
边框顶部:2个实心#333;
;
颜色:#000;
字体大小:粗体;
}

最终价格----
3,924,000324,00003,600,0001,800,00001,800,0002
1,526,000126,00001,400,0001,400,00001,400,0001
5,886,000486,00005,400,0001,800,00001,800,0003
1,950,000001,950,0001,950,000001,950,0001

问题不太清楚。如果您共享包含该表的基本HTML代码片段,问题会更简单

无论如何,我将介绍我的解决方案,以计算表列中的数据总和

仅供参考:假设列名如下面的屏幕截图所示:

$(函数(){
//函数,该函数读取表数据并返回对象数组
常量readTableDataToArray=(tableId)=>{
让字段=[];
让产品=[];
$(tableId).find('tr')。每个((索引,行)=>{
如果(索引==0){
$(行).find('th')。每个((thIndex,header)=>{
splice(thIndex,1,`${thIndex+1}}{$(header.text()}`);
});
}否则{
让productRowValue={};
$(行)。查找('td')。每个((单元格索引,单元格)=>{
productRowValue={
…产品价值,
[fields[cellIndex]]:解析浮点($(cell.text()| |“”)。替换(/[^0-9]+/g',),10),
};
});
products.push(productRowValue);
}
});
退货产品;
}
//函数,该函数接受对象数组并返回所有字段的总和
const getSumOfColumns=(数据)=>{
返回数据。减少((累加器,值)=>{
常量键=对象键(值);
设tempAcc={};
key.map((key)=>{
常量accFieldValue=累加器[键]| | 0;
常量keyFieldValue=值[键]| | 0;
tempAcc[key]=accFieldValue+keyFieldValue;
});
返回tempAcc;
}, {});;
}
//函数,该函数使用提供的总和数据将行添加到表中
const addTotalRowtTable=(表ID,数据)=>{
const sumRow=document.createElement('tr');
sumRow.classList.add('sum-row');
const columns=Object.keys(数据);
常量值=列。映射((列)=>{
const cell=document.createElement('td');
cell.innerHTML=数据[col];
返回单元;
});
追加(…值);
$(tableId).append(sumRow);
}
//获取产品数组的触发器函数
const products=readTableDataToArray(“#products”);
//计算字段的和
const sum=getSumOfColumns(乘积);
//将总和行追加到表中
AddTotalRowtTable(“#乘积”,总和);
});
*{
字体系列:Arial、Helvetica、SAN-