move.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /**
  2. * 移动,排序处理帮助类
  3. * <pre>
  4. * 作者:hugh zhuang
  5. * 邮箱:3378340995@qq.com
  6. * 日期:2018-07-02-下午3:29:34
  7. * 版权:广州流辰信息技术有限公司
  8. * </pre>
  9. */
  10. /**
  11. * 数组元素交换位置
  12. * @param {array} arr 数组
  13. * @param {number} index1
  14. * @param {number} index2
  15. * index1和index2分别是两个数组的索引值,即是两个要交换元素位置的索引值,如1,5就是数组中下标为1和5的两个元素交换位置
  16. */
  17. function swapArray(arr, index1, index2) {
  18. arr[index1] = arr.splice(index2, 1, arr[index1])[0]
  19. return arr
  20. }
  21. export function moveUp(source, count) {
  22. let result = source
  23. for (let c = 0; c < count; c++) {
  24. for (let i = 1; i < result.length; i++) {
  25. if (result[i].checked && !result[i - 1].checked) {
  26. result = swapArray(result, i, i - 1)
  27. }
  28. }
  29. }
  30. return result
  31. }
  32. export function moveDown(source, count) {
  33. let result = source
  34. for (let c = 0; c < count; c++) {
  35. for (let i = result.length - 2; i > -1; i--) {
  36. if (result[i].checked && !result[i + 1].checked) {
  37. result = swapArray(result, i, i + 1)
  38. }
  39. }
  40. }
  41. return result
  42. }
  43. export function move2(source, target, isTop) {
  44. let result = []
  45. let sourceArr = JSON.parse(JSON.stringify(source))
  46. const checkArr = []
  47. target.forEach(i => {
  48. sourceArr.forEach(l => {
  49. if (l.id === i) {
  50. checkArr.push(l)
  51. }
  52. })
  53. })
  54. checkArr.forEach(l => {
  55. sourceArr.forEach((item, index) => {
  56. if (item.id === l.id) {
  57. sourceArr.splice(index, 1)
  58. }
  59. })
  60. })
  61. if (isTop) {
  62. sourceArr = [...checkArr, ...sourceArr]
  63. } else {
  64. sourceArr = [...sourceArr, ...checkArr]
  65. }
  66. result = sourceArr
  67. return result
  68. }
  69. export function moveTop(source, target) {
  70. return move2(source, target, true)
  71. }
  72. export function moveButtom(source, target) {
  73. return move2(source, target, false)
  74. }