文章目录
一、数组去重 (能想到的方法)
对象、set、includes(indexof)、concat(push)
二、冒泡排序
比较轮和次数
三、快速排序
二分法,左中右通过concat连接
四、插入排序
类似抓牌,取第一张放入
五、判断回文数
数组反转再转字符串
六、多维数组扁平化处理
方法一:使用数组自带方法flat(Infinity)
const res = arr.flat(Infinity)
方法二:使用正则
const res = JSON.Stringify(arr).replace(/[|]/g,’’).split(“,”)
方法三:改良正则
const res = JSON.parse( ‘[’ + JSON.Stringify(arr).replace(/[|]/g,’’)+’]’)
方法四:使用reduce
const flatten= arr => {
return arr.reduce((pre,cur) => {
return pre.concat(Array.isArray(cur)?flatten(cur):cur)
},[])
}
const res = flatten(arr)
方法五:使用递归
const res = []
const fn = arr => {
for(let i=0; i<arr.length; i++){
if(Array.isArray(arr[i])){
fn(arr[i])
}else{
res.push(arr[i])
}
}
}
fn(arr)
七、所有和为n的连续正数序列
八、数组中找出和为N的两个正数
九、具有最大和的连续子数组
十、合并两个有序数组
十一、斐波那契数列
十二、寻找两个正序数组的中位数
/*
* @Author: jinx
* @Date: 2021-07-05 10:52:53
* @LastEditors: jinx
* @Descripttion: 文件描述
*/
function findMedianSortedArrays (a,b) {
let indexA = 0, indexB = 0, result = []
while (a[indexA] !== undefined && b[indexB] !== undefined) {
if (a[indexA] > b[indexB]) {
result.push(b[indexB++])
} else if (a[indexA] < b[indexB]) {
result.push(a[indexA++])
} else {
result.push(a[indexA++])
result.push(b[indexB++])
}
}
if (a[indexA] !== undefined) {
for (let i = indexA; i < a.length; i++) {
result.push(a[i])
}
}
if (b[indexB] !== undefined) {
for (let i = indexB; i < b.length; i++) {
result.push(b[i])
}
}
let middleLength = parseInt(result.length / 2)
if(result.length % 2 == 0){
return (result[middleLength] + result[middleLength - 1]) /2
} else {
return result[middleLength]
}
}
let result = findMedianSortedArrays([1,1,1,1,1,1,1,1,1,1,4,4],[1,3,4,4,4,4,4,4,4,4,4])
console.log(result)
十三、手写map
function map(arr,mapCallback) {
//检测参数是否正确
if(!Array.isArray(arr) || !arr.length || typeof mapCallback != ‘function’){
return []
}else{
//进行下面操作
let result = []
for(let i =0 ;i <arr.length; i++){
result.push(mapCallback(arr[i],i,arr))
}
return result
}
}
var res = map(arr,(item)=>{
return item*2
})
总结
一直觉得笨一点没关系,只要我保持学习,总有一天会飞起来。