//! 数组扩展 sort方法 不是es6新增的方法
//! 功能 是  对原数组进行排序 sort() 方法用原地算法对数组的元素进行排序,并返回数组。

const array = [11, 2, 8, 10, 1, 5, 3];

//TODO 将array进行升序排序
// 默认排序顺序是在将元素转换为字符串,在排序后等结果;
array.sort();
console.log(array);

//因此下面字符串排序 是没有问题的
const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);

//? 但是 实际排序顺序我们希望是安装数字来排列
//! 那么 就必须给sort方法传入一个比较函数
/**
 * compareFn(a, b) a 和 b 是原数组中要比较的两个值,同时 原位置 a 在 b 前
 * 返回值	  排序顺序
   > 0	   a 在 b 后
   < 0	   a 在 b 前
   === 0	 保持 a 和 b 的顺序
 */

// array.sort((a, b) => (a > b ? 1 : -1));

// 由于排序的类型 是数字
array.sort((a, b) => a - b);

console.log(`output->array`, array);

// 降序
// 由于排序的类型 是数字
array.sort((a, b) => b - a);
console.log(`output->array`, array);

//TODO  对象可以按照某个属性排序:
const items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 },
  { name: 'The', value: -12 },
  { name: 'Magnetic', value: 13 },
  { name: 'Zeros', value: 37 },
];

// 按照 name 属性 对数组中的对象进行升序排序
items.sort((a, b) => (a.name > b.name ? 1 : -1));

console.log(items);

// 按照 value 对数组中的对象进行升序排序
items.sort((a, b) => a.value - b.value);

console.log(items);