Object.keys() 实现数组排序

1,029 阅读1分钟

今天学习时,突然想到一种新方法给数组排序,特此记录下来。

直接上代码:

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。

代码验证:

代码验证

那么用 Object.keys() 来实现数组排序,有意义吗?其实没意义,用 Object.keys() 来实现数组排序不涉及算法,不涉及算法的话,用数组的 sort 方法更简洁。

重要的是,知道 for...in、Object.keys(obj)、Object.getOwnPropertyNames(obj)、Object.getOwnPropertySymbols(obj)、Reflect.ownKeys(obj),这 5 种方法遍历对象的键名,都遵守同样的属性遍历的次序规则:

  1. 首先遍历所有数值键,按照数值升序排列。
  2. 其次遍历所有字符串键,按照加入时间升序排列。
  3. 最后遍历所有 Symbol 键,按照加入时间升序排列。