我想尝试从列表中总结出不同的值..目前我能够这样做,如果只有2个类似的记录。如果超过2我无法进行检查。以下是javascript代码:
function validateData(){
var total = document.frm.size.value;
var msg="";
var tbxA;
var tbxB;
var tbxA2;
var tbxB2;
var tbxC;
var totalValue =0;
var repeatedValue= 0;
var row = 0;
var row2 = 0;
for(var i=0; i<parseInt(total); i++){
tbxA = document.getElementById('tbx_A'+i).value;
tbxB = document.getElementById('tbx_B'+i).value-0;
tbxC = document.getElementById('tbx_C'+i).value;
for(var j=i+1; j<parseInt(total); j++){
tbxA2 = document.getElementById('tbx_A'+j).value;
tbxB2 = document.getElementById('tbx_B'+j).value-0;
if (tbxA==tbxA2) {
totalValue = tbxB + tbxB2;
}
if (totalValue != tbxC) {
repeatedValue= 1;
row = i;
row2 = j;
msg+="*total value does not add up at row " +(row2+1);
break;
}
}
if(repeatedValue== 1){
break;
}
}
return msg;
}
例如A:水果的种类,B:每种水果的总数,C:一次购买的数量为多少 C的总和应该等于B.即Apple:3 + 3 + 4 = 10.因此,如果总数不等于10,则应该提示我错误。
A B C
Apple 10 3
Orange 10 10
Apple - 3
Apple - 4
上面的代码会提示错误,但它不会超出Apple的第二次出现 所以,是的,我应该如何确保它循环遍历整个列表以总结所有类似的值?
提前感谢您提供任何可能的帮助!
答案 0 :(得分:2)
试试这个:
var total = +document.frm.size.value,
data = {};
for(var i=0; i<total; ++i) {
var key = document.getElementById('tbx_A'+i).value;
data[key] = data[key] || {B:0, C:0};
data[key].B += +document.getElementById('tbx_B'+i).value || 0;
data[key].C += +document.getElementById('tbx_C'+i).value || 0;
}
for(var i in data) {
if(data.hasOwnProperty(i) && data[i].B != data[i].C) {
return "total value does not add up";
}
}
return "";
一些意见:
parseInt
(和parseFloat
)非常慢。字符串前的+
运算符将其转换为更快的数字。但如果你真的想确保数字是整数,请使用Math.floor()
,Math.round()
,Math.ceil()
或更快但难以辨认的|0
。parseInt
(例如,您想将'123foobar'
转换为123
),请始终使用基数。例如:parseInt('123', 10)