这看起来非常基本,但我找不到最好的方法来执行此操作...我正在尝试设置一个在用户选择的开始和结束变量之间循环的函数。这就是我最终的结果,但我确信有更好的方法(demo)。
注意:x& y变量索引为1,而不是零。
getWidths1 = function(x, y) {
var start = (x < y) ? x : y,
end = (x < y) ? y : x,
total = 0;
for (; start < end; start++) {
total += values[start - 1] || 0;
}
return total;
};
我尝试了这个功能,但结果是当y&gt;时结果。 X:
getWidths2 = function(x, y) {
var total = 0,
diff = (x < y) ? 1 : -1;
while (x !== y) {
total += values[x - 1] || 0;
x += diff;
}
return w;
};
那么,第一个功能是最好的,还是有人有更好的方法?
答案 0 :(得分:3)
第一个还不错。我认为这稍微传统一点:
for (var i = start; i < end; i++){
}
唯一真正的区别是它不会影响开始和结束。
答案 1 :(得分:1)
我会做一些改变:
使用Math.min和Math.max - 更具可读性。
如果您想要的第一个值是values[start]
,请不要从开头减去一个。
var getWidths1 = function(x, y) {
var start = Math.min(x,y), end = Math.max(x,y);
var total = 0;
for (; start < end; start++) {
total += values[start] || 0;
}
return(total);
}
答案 2 :(得分:0)
我同意@kingjiv的补充警告,如果你想在y
包含该项目,那么你需要:
for (var i = start; i <= end; i++){
...
}
因为它是您的代码(两个版本),所以将x
包含的值与y
的值相加。