array.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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 const arrSort = <T>(arr: Array<T>, valueName: string, flag: boolean): Array<T> | boolean => {
  13. if (flag === undefined) {
  14. flag = true
  15. }
  16. // 判断是否是数组
  17. if (isArray(arr)) {
  18. // 判断数组长度是否为0
  19. if (arr.length !== 0) {
  20. let newArr = []
  21. newArr = JSON.parse(JSON.stringify(arr)) as Array<T>
  22. // 对属性排序
  23. if (valueName) {
  24. if (flag) {
  25. newArr.sort((a: any, b: any) => Date.parse(a[valueName]) - Date.parse(b[valueName]))
  26. } else {
  27. newArr.sort((a: any, b: any) => Date.parse(b[valueName]) - Date.parse(a[valueName]))
  28. }
  29. } else {
  30. if (flag) {
  31. newArr.sort((a: any, b: any) => a - b)
  32. } else {
  33. newArr.sort((a: any, b: any) => b - a)
  34. }
  35. }
  36. return newArr
  37. } else {
  38. return false
  39. }
  40. } else {
  41. return false
  42. }
  43. }
  44. /**
  45. * 是否是数组
  46. * @param target 目标
  47. * @returns true||false
  48. */
  49. export const isArray = (target: unknown): boolean => {
  50. return target instanceof Array
  51. }