listSort.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. export default {
  2. data() {
  3. return {}
  4. },
  5. methods: {
  6. /**
  7. * 列表数组排序
  8. * @param list [Array] 要进行排序的数组
  9. * @param field {String} 要进行排序的字段
  10. * @param reduce {Boolean} 排序规则 默认为正序排列 false 正序 true 倒序
  11. */
  12. mixinsSort(list, field, reduce = false) {
  13. let _list = list.concat([])
  14. let arr = field.split(':')
  15. if (reduce) {
  16. // 倒序
  17. _list = _list.sort((a, b) => {
  18. let val1 = a[arr[0]], val2 = b[arr[0]]
  19. if (arr.length > 1) {
  20. for (let i = 1; i < arr.length; i++) {
  21. val1 = val1[arr[i]]
  22. val2 = val2[arr[i]]
  23. }
  24. }
  25. return this._compare(val2, val1)
  26. })
  27. } else {
  28. // 正序
  29. _list = _list.sort((a, b) => {
  30. let val1 = a[arr[0]], val2 = b[arr[0]]
  31. if (arr.length > 1) {
  32. for (let i = 1; i < arr.length; i++) {
  33. val1 = val1[arr[i]]
  34. val2 = val2[arr[i]]
  35. }
  36. }
  37. return this._compare(val1, val2)
  38. })
  39. }
  40. return _list
  41. },
  42. _compare(a, b) {
  43. // 小于 0 ,那么 a 会被排列到 b 之前
  44. // 等于 0 , a 和 b 的相对位置不变
  45. // 大于 0 , b 会被排列到 a 之前
  46. if (a < b) {
  47. return -1;
  48. }
  49. if (a > b) {
  50. return 1;
  51. }
  52. return 0;
  53. }
  54. }
  55. }