array.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /**
  2. * 对数组排序,不改变原数组
  3. * @param {Array} arr 目标数组
  4. * @param {string} valueName 对象数组中的某个值进行排序;填了此项时,flag必填
  5. * @param {boolean} flag 不填或者true是从升序;false为降序;
  6. * @returns 返回排序后的新数组;flase:数组为空不是数组
  7. * @example 对this.arr中每个对象的time属性进行降序排序
  8. * const newArr = arrSort(oldArr,false,'time')
  9. * @author 李畅
  10. * @email dotb116393@163.com
  11. */
  12. export function arrSort<T>(arr: Array<T>, valueName: string, flag: boolean): Array<T> | boolean {
  13. if (flag === undefined)
  14. flag = true
  15. // 判断是否是数组
  16. if (isArray(arr)) {
  17. // 判断数组长度是否为0
  18. if (arr.length !== 0) {
  19. let newArr = []
  20. newArr = JSON.parse(JSON.stringify(arr)) as Array<T>
  21. // 对属性排序
  22. if (valueName) {
  23. if (flag)
  24. newArr.sort((a: any, b: any) => Date.parse(a[valueName]) - Date.parse(b[valueName]))
  25. else
  26. newArr.sort((a: any, b: any) => Date.parse(b[valueName]) - Date.parse(a[valueName]))
  27. }
  28. else {
  29. if (flag)
  30. newArr.sort((a: any, b: any) => a - b)
  31. else
  32. newArr.sort((a: any, b: any) => b - a)
  33. }
  34. return newArr
  35. }
  36. else {
  37. return false
  38. }
  39. }
  40. else {
  41. return false
  42. }
  43. }
  44. /**
  45. * 是否是数组
  46. * @param target 目标
  47. * @returns true||false
  48. */
  49. export function isArray(target: unknown): boolean {
  50. return Array.isArray(target)
  51. }