假设我有一个特定的数组:
ary = [0, 1, 2, 4, 5, 6];
这是一个用于范围的数组,其中第一个范围是 0 到 1,第二个范围是 1 到 2,依此类推。该数组的构建使得任何值都不能小于前一个值,但它们可以相等。
第一个和最后一个数组项是静态的,永远不会改变 - 因此范围的总和始终为 6。
function rangeSum(a){
var sum = 0;
for(var i = 0; i< a.length-1;i++){
sum += a[i+1]-a[i];
}
return sum; //Always equals 6 with this array
}
现在我想改变一个范围:
ary = [0, 1, 2, 4, 5, 6];
ary2 = [0, 1, 3, 4, 5, 6]; //Increases the second range with 1, reduces the third range with 1, the rest are unchanged
我想要一个函数,它可以减少第三个范围,并将其均匀地分布在其余范围内,同时保持它们的相互范围大小。
因此,而不是结束:
ary = [0, 1, 2, 4, 5, 6]; //Range [1, 1, 2, 1, 1]
ary2 = [0, 1, 3, 4, 5, 6]; //Range [1, 2, 1, 1, 1]
我们得到
ary2 = [0, 1, 3, 4.5, 5.25, 6]; //Range [1, 2, 1.5, 0.75, 0.75]
前:
function shiftRange(array, index, increase){
//Compute new array
return ary2;
}
ary2 = shiftRange(ary, 2, 1);
该函数应该适用于任何数组大小、任何索引(第一个和最后一个除外)和负数。
这是我试图开始工作的最新代码,但它可能比必要的复杂 - 它根本不起作用:http: //jsfiddle.net/FN6TX/
希望有人可以提供帮助:=)