js多维重复乱序数组转一维有序数组

102 阅读1分钟

输入一个有重复数字的多维乱序数组,要求输出一个去重升序的一维数组

  • 快速排序
const qs = (arr, left = 0, right = arr.length - 1) => {
  if (arr.length > 1) {
    let mid = getMid(arr, left, right)
    if (left < mid - 1) {
      qs(arr, left, mid - 1)
    }
    if (mid < right) {
      qs(arr, mid, right)
    }
  }
  return arr
}
const getMid = (arr, left, right) => {
  let midIndex = arr[Math.floor(left + (right - left) / 2)]
  let i = left, j = right
  while (i <= j) {
    while (arr[i] < midIndex) i++
    while (midIndex < arr[j]) j--
    if (i <= j) {
      [arr[i], arr[j]] = [arr[j], arr[i]]
      i++
      j--
    }
  }
  return i
}
  • 待去重和排序的多维数组
const sourceData = [234, 6, 3426, [2, 4, 6443, 6, [1, 2, 3]]]
  • 将源数据转换成去重的一维数组

Array.prototype.flat() - MDN

// 注意new Set()去重后, return出来的是一个对象, 需要用Array.from()转为数组
let tempData = Array.from(new Set(sourceData.flat(Infinity)))
  • 得到去重和排序的一维数组
let targetData = qs(tempData)