今天学习时,忽然想到一种新方法给数组排序,特此记录下来。算法
直接上代码:数组
const arr = [3, 4, 6, 7, 10, 2];
const obj = {};
arr.forEach(value => obj[value] = value);
const objKey = Object.keys(obj);
const arrUp = objKey.map(value => parseInt(value));
复制代码
代码中,arr 是待排序数组,arrUp 是 arr 的升序数组,arrDown 是 arr 的降序数组,代码思路很简单,由于 Object.keys() 遍历对象属性时,首先遍历全部数值键,按照数值升序排列,因此将 arr 中的数值做为 obj 的属性,当执行 Object.keys(obj) 时,返回一个 '升序' 数组,可是这个数组中的成员都是字符串,因此最后用 parseInt 将字符串转为数字,就获得了 arr 的升序数组 arrUp。bash
代码验证: 学习
那么用 Object.keys() 来实现数组排序,有意义吗?其实没意义,用 Object.keys() 来实现数组排序不涉及算法,不涉及算法的话,用数组的 sort 方法更简洁。spa
重要的是,知道 for...in、Object.keys(obj)、Object.getOwnPropertyNames(obj)、Object.getOwnPropertySymbols(obj)、Reflect.ownKeys(obj),这 5 种方法遍历对象的键名,都遵照一样的属性遍历的次序规则:code