4.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. //! 数组扩展 sort方法 不是es6新增的方法
  2. //! 功能 是 对原数组进行排序 sort() 方法用原地算法对数组的元素进行排序,并返回数组。
  3. const array = [11, 2, 8, 10, 1, 5, 3];
  4. //TODO 将array进行升序排序
  5. // 默认排序顺序是在将元素转换为字符串,在排序后等结果;
  6. array.sort();
  7. console.log(array);
  8. //因此下面字符串排序 是没有问题的
  9. const months = ['March', 'Jan', 'Feb', 'Dec'];
  10. months.sort();
  11. console.log(months);
  12. //? 但是 实际排序顺序我们希望是安装数字来排列
  13. //! 那么 就必须给sort方法传入一个比较函数
  14. /**
  15. * compareFn(a, b) a 和 b 是原数组中要比较的两个值,同时 原位置 a 在 b 前
  16. * 返回值 排序顺序
  17. > 0 a 在 b 后
  18. < 0 a 在 b 前
  19. === 0 保持 a 和 b 的顺序
  20. */
  21. // array.sort((a, b) => (a > b ? 1 : -1));
  22. // 由于排序的类型 是数字
  23. array.sort((a, b) => a - b);
  24. console.log(`output->array`, array);
  25. // 降序
  26. // 由于排序的类型 是数字
  27. array.sort((a, b) => b - a);
  28. console.log(`output->array`, array);
  29. //TODO 对象可以按照某个属性排序:
  30. const items = [
  31. { name: 'Edward', value: 21 },
  32. { name: 'Sharpe', value: 37 },
  33. { name: 'And', value: 45 },
  34. { name: 'The', value: -12 },
  35. { name: 'Magnetic', value: 13 },
  36. { name: 'Zeros', value: 37 },
  37. ];
  38. // 按照 name 属性 对数组中的对象进行升序排序
  39. items.sort((a, b) => (a.name > b.name ? 1 : -1));
  40. console.log(items);
  41. // 按照 value 对数组中的对象进行升序排序
  42. items.sort((a, b) => a.value - b.value);
  43. console.log(items);