有一個排序需求,需要實現:當前數據往后移動N位或者向前移動N位。想了半天,沒想到好的解決辦法。操作對象是數據庫一條數據希望能在損耗最少的情況下,實現
1 回答

RISEBY
TA貢獻1856條經驗 獲得超5個贊
核心思想是將數組依據原始位置和新位置”切割“成幾部分,調整位置后重新合并,不涉及排序。
并且,我給的方案能左移也能右移動。
PS. 看到題目變更,目標是數據庫,欲哭無淚!
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];/** i: 目標元素的index steps: 移動步數,正數向右移動,負數向左移動 inArray: 目標數組 */function moveStepsInArray(i, steps, inArray) { if(i<0 || i>inArray.length - 1 || steps === 0) { return inArray; } var newPosition = i + steps; if(newPosition < 0) { newPosition = 0; } if(newPosition > inArray.length - 1) { newPosition = inArray.length - 1; } var front = steps > 0 ? i: newPosition; var after = steps > 0 ? newPosition: i; var targetVal = inArray[i]; if(steps > 0) { return inArray.slice(0, front) .concat(inArray.slice(front + 1, after + 1)) .concat([targetVal]) .concat(inArray.slice(after + 1)) } if(steps < 0) { return inArray.slice(0, front) .concat([targetVal]) .concat(inArray.slice(front, after)) .concat(inArray.slice(after + 1)); } } moveStepsInArray(4, -3, arr); //將arr中的第4個元素向左移動3步
- 1 回答
- 0 關注
- 571 瀏覽
添加回答
舉報
0/150
提交
取消