特定の配列があるとしましょう:
ary = [0, 1, 2, 4, 5, 6];
これは範囲に使用される配列で、最初の範囲は 0 から 1、2 番目の範囲は 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
相互の範囲サイズを維持しながら、3 番目の範囲の削減を取り、それを残りの範囲に均等に広げる関数が必要です。
したがって、次のようになる代わりに:
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/
誰かが助けてくれることを願っています:=)