// 数组扁平化 递归 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))