数组操作&&排序

28 阅读1分钟
// 数组扁平化 递归 reduce 扩展运算符var arr = [1, [2, [3, 4]]];const flatFn = (arr) => {  let res = arr  while(res.some(a => Array.isArray(a))) {    res = [].concat(...res)  }  return res}const flatFn2 = (arr) => {  return arr.reduce((prev, cur) => {    return prev.concat(Array.isArray(cur) ? flatFn(cur) : cur)  },[])}const flatFn3 = (arr) => {  let res = []  arr.forEach(a => {    let t = a    if (Array.isArray(a)) {      res = res.concat(flatFn(a))    } else {      res.push(a)    }  })  return res}// console.log(flatFn(arr))// 数组去重  双层循环  对象键值对 set mapvar array3 = [1, 1, 'a', 'A', 2, 2];const uniqueArr1 = (arr) => {  let res = []  arr.forEach(a => {    if(res.indexOf(a)=== -1) {      res.push(a)    }  })  return res}const uniqueArr2 = (arr) => {  const obj = {}  arr.forEach(a => {    obj[a] = a  })  return Object.values(obj)}const uniqueArr = (arr) => {  // const s = new Set(arr)  // return Array.from(s)  const s = new Map()  arr.forEach(a => s.set(a,a))  return Array.from(s.values())}console.log(uniqueArr(array3))// 常用的正则表达式// 匹配所有的字母,不区分大小写let reg = /[a-z]/i// 匹配某些字母,如元音字母reg = /[aeiou]/// 匹配空格reg = /\s/// 匹配数字reg = /[0-9]/// 排序 冒泡 插入 归并 快排const arr111 = [1,4,3,2,5,6,3,4,7,8,9,2,0]// 冒泡function sortFn(arr) {  for (let i = 0;i< arr.length;i++) {    for (let j = 0;j < arr.length; j++) {      if (arr[i] < arr[j]) {        const t = arr[i]        arr[i] = arr[j]        arr[j] = t      }    }  }  return arr}// 插入function sortFn1(arr) {  for (let i = 1; i < arr.length; i++) {    let key = arr[i];    let j = i - 1;    while (j >= 0 && arr[j] > key) {      arr[j + 1] = arr[j];      j = j - 1;    }    arr[j + 1] = key;  }  return arr;}function mergeSort(arr) {  if (arr.length <= 1) {    return arr;  }  const mid = Math.floor(arr.length / 2);  const left = arr.slice(0, mid);  const right = arr.slice(mid);  return merge(mergeSort(left), mergeSort(right));}// 归并function merge(left, right) {  let result = [];  while (left.length && right.length) {    if (left[0] <= right[0]) {      result.push(left.shift());    } else {      result.push(right.shift());    }  }  while (left.length) {    result.push(left.shift());  }  while (right.length) {    result.push(right.shift());  }  return result;}// 快排function quickSort(arr) {  if (arr.length <= 1) {    return arr;  }  const pivotIndex = Math.floor(arr.length / 2);  const pivot = arr.splice(pivotIndex, 1)[0];  const left = [];  const right = [];  for (let i = 0; i < arr.length; i++) {    if (arr[i] < pivot) {      left.push(arr[i]);    } else {      right.push(arr[i]);    }  }  return quickSort(left).concat([pivot], quickSort(right));}console.log(sortFn(arr111))