Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops - Fatal编程技术网

带有动态开始和结束变量的Javascript循环

带有动态开始和结束变量的Javascript循环,javascript,loops,Javascript,Loops,这似乎很基本,但我找不到最好的方法来做这件事。。。我试图设置一个函数,在用户选择的开始变量和结束变量之间循环。这就是我最终得到的结果,但我相信有更好的方法来做到这一点() 注意:x&y变量索引为1,而不是零 getWidths1 = function(x, y) { var start = (x < y) ? x : y, end = (x < y) ? y : x, total = 0; for (; start < end;

这似乎很基本,但我找不到最好的方法来做这件事。。。我试图设置一个函数,在用户选择的开始变量和结束变量之间循环。这就是我最终得到的结果,但我相信有更好的方法来做到这一点()

注意: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;
};
getWidths1=函数(x,y){
变量开始=(x
我尝试了这个函数,但是当y>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;
};
getWidths2=函数(x,y){
var总计=0,
差异=(x

那么,第一个函数是最好的,还是有人有更好的方法呢?

第一个也不错。我认为这更为传统:

for (var i = start; i < end; i++){

}
for(var i=start;i

唯一真正的区别是它不影响开始和结束。

第一个也不错。我认为这更为传统:

for (var i = start; i < end; i++){

}
for(var i=start;i

唯一真正的区别是它不会影响开始和结束。

我同意@kingjiv的观点,但有一点需要注意,如果您想将项目包含在
y
中,那么您需要:

for (var i = start; i <= end; i++){
...
}

for(var i=start;i我同意@kingjiv的观点,并附加了一条警告,即如果您想将项目包含在
y
中,那么您需要:

for (var i = start; i <= end; i++){
...
}

for(var i=start;i我要做一些更改:

使用Math.min和Math.max-更具可读性

如果您想要的第一个值是
values[start]
,则不要从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);
}
var getWidths1=函数(x,y){
var start=Math.min(x,y),end=Math.max(x,y);
var合计=0;
对于(;开始<结束;开始++){
总计+=值[开始]| | 0;
}
收益(总计);
}

我要做一些更改:

使用Math.min和Math.max-更具可读性

如果您想要的第一个值是
values[start]
,则不要从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);
}
var getWidths1=函数(x,y){
var start=Math.min(x,y),end=Math.max(x,y);
var合计=0;
对于(;开始<结束;开始++){
总计+=值[开始]| | 0;
}
收益(总计);
}

对我来说似乎很好,但你可以使用
start=Math.min(x,y);
end=Math.max(x,y);
使脚本更可读对我来说似乎很好,但你可以使用
start=Math.min(x,y);
end=Math.max(x,y);
使脚本更可读