1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- //! 数组扩展 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);
|