为了账号安全,请及时绑定邮箱和手机立即绑定

数据排序问题

数据排序问题

PHP
撒科打诨 2018-08-10 13:44:12
有一个排序需求,需要实现:当前数据往后移动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步


查看完整回答
反对 回复 2018-08-12
  • 1 回答
  • 0 关注
  • 547 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信