针对单一数据类型数组排序方法实现

67 阅读1分钟

  在JavaScript中,可以使用sort()方法对数组进行排序。但是对于包含不同类型的单一类型数组进行排序时,我们需要自定义一个比较函数来判断元素间的排序规则。实现一个通用的、能够处理多种类型(例如数字、字符串和日期等)的数组排序函数:

function sortArray(arr) {
  // 判断输入是数组
  if (!Array.isArray(arr)) {
    throw new Error('输入必须是数组!!');
  }

  // 对于数字数组,使用默认排序 升序
  if (arr.every(item => typeof item == 'number')) {
    return arr.sort((a, b) => a - b);
  }

  // 对于字符串数组,使用localeCompare排序
  if (arr.every(item => typeof item == 'string')) {
    return arr.sort((a, b) => a.localeCompare(b));
  }

  // 对于日期数组,按日期排序
  if (arr.every(item => item instanceof Date)) {
    return arr.sort((a, b) => a.getTime() - b.getTime());
  }

  // 其他类型排序
  throw new Error('暂不支持当前数组类型排序!!');
}

let numberArray = [4, 2, 8, 1, 5];
// 输出:[1, 2, 4, 5, 8]
console.log(sortArray(numberArray)); 

  instanceof运算符用来判断一个对象是否是某个构造函数的实例。它通过检查对象的原型链来确定该对象是否由特定的构造函数创建。
  但是不能直接使用instanceof来判数字个变量是否是字符串或数值类型。因为JavaScript的原始数据类型(包括string和number)不是对象,它们没有构造函数实例化的过程。