【发布时间】:2014-01-16 11:21:47
【问题描述】:
我想尝试从一个列表中总结出不同的价值。目前如果只有 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 的第二次出现。
所以是的,我应该如何确保它遍历整个列表以总结所有相似的值?
提前感谢任何可能的帮助!
【问题讨论】:
-
我不太了解这个脚本的效率,但我可以说你的嵌套
for循环是不必要的。你只使用变量j来添加+1,所以你可以简单地做var j = i+1;, 。此外,您没有将 repeatFlag、tbxA2 和 tbxB2 声明为变量。 -
@Tyblitz 我需要嵌套的 for 循环来进行值比较。bt 这个循环的问题是,一旦找到下一个相似的值,它就会停止循环,而不是循环到最后找到其余类似值。那我该怎么做呢?
-
一种方法是: 1) 列出
[{"A":"Apple","C":3},{"A":"Orange","C":10}...]; 2) 对列表进行排序,使相同的As 一起出现; 3) 如果A相等,则通过将每个C添加到其前一项来“减少”列表。
标签: javascript loops