冒泡排序 bubblingSort
let arr = [99,33,66,17,24,87,65,22,666,103]
function bubblingSort(ary){
for (let i = 0
console.log('1')
let flag = true
for (let j = 0
console.log('2')
if(ary[j]>ary[j+1]){
let temp = ary[j]
ary[j] = ary[j+1]
ary[j+1] = temp
flag = false
}
}
if(flag){
break
}
}
return ary
}
let result = bubblingSort(arr)
console.log(result)
快速排序 quickSort
let arr = [99,33,66,17,24,87,65,22,666,103]
function quickSort(ary){
if(ary.length<=0) return ary
let middleIndex = Math.floor(ary.length/2)
console.log(middleIndex)
let leftArr = [],
rightArr = []
for (let i = 0
if(ary[i]>ary[middleIndex]){
rightArr.push(ary[i])
}
if(ary[i]<ary[middleIndex]){
leftArr.push(ary[i])
}
}
return quickSort(leftArr).concat(ary[middleIndex],quickSort(rightArr))
}
let result = quickSort(arr)
console.log(result)
插入排序 insertionSort
let arr = [99,33,66,17,24,87,65,22,666,103]
function insertionSort(ary){
let newAry = []
newAry.push(ary[0])
for (let i = 1
let cur = ary[i]
// 循环 arr 中的每一项,跟新数组newArr中从后往前依次进行比较,如果比新数组中的这一项小,那么需要继续和上一项进行比较,如果比新数组中这一项大,那么放在该项的后面
for (let j = newAry.length-1
if(cur<newAry[j]){
if(j===0){
newAry.unshift(cur)
}
}else{
newAry.splice(j+1,0,cur)
break
}
}
}
return newAry
}
let result = insertionSort(arr)
console.log(result)
防抖 debounce
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div>
<input type="text" id="input1">
</div>
<script>
const input1 = document.getElementById('input1')
function debounce(fn,delay=500){
let timer = null;
return function (){
if(timer){
clearTimeout(timer)
}
timer = setTimeout(()=>{
fn.apply(this,arguments)
timer = null
},delay)
}
}
input1.addEventListener('keyup',debounce(function(){
console.log(input1.value);
},2000))
</script>
</body>
</html>
节流 throttle
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div>
<div id="div1" draggable="true">可拖拽</div>
</div>
<script>
const div1 = document.getElementById('div1');
function throttle(fn, delay = 500) {
let timer = null;
return function () {
if (timer) return;
timer = setTimeout(() => {
fn.apply(this, arguments)
timer = null
}, delay)
}
}
div1.addEventListener('drag', throttle(function (e) {
console.log(e.offsetX,e.offsetY);
}, 200))
</script>
</body>
</html>
深拷贝 deepClone
let obj = {name:'小明',age:18}
function deepClone(obj){
if(Object.prototype.toString.call(obj)==='[object Object]'){
let newObj = {}
for(let key in obj){
newObj[key] = deepClone(obj[key])
}
return newObj
}else if(Object.prototype.toString.call(obj)==='[object Array]'){
let newArr = []
obj.forEach(item=>{
newArr.push(deepClone[item])
})
}
return obj
}
let obj1 = deepClone(obj)
obj.name='小红'
obj.age=20
console.log(obj)
console.log(obj1)
console.log(obj===obj1)
将数组转换为树结构
let list = [
{ idSelf: 1, label: "苹果", idParent: 100, },
{ idSelf: 2, label: "茄子", idParent: 200, },
{ idSelf: 3, label: "香蕉", idParent: 100, },
{ idSelf: 4, label: "运动类型", idParent: 300, },
{ idSelf: 100, label: "水果", idParent: 900, },
{ idSelf: 200, label: "蔬菜", idParent: 600, },
];
function listToTree(arr, id) {
return arr
.filter((item) => {
return item.idParent == id;
})
.map((item1) => {
return { ...item1, children: listToTree(arr, item1.idSelf) };
});
};
let newList = listToTree(list, 900);
console.log(newList);
实现数组扁平化
let ary = [1, 2, [3, 4, 5, [6, 7, 8, [9, 10]]]]
//数组扁平化
let arr = ary.toString().split(',').map(item => {
return + item
})
console.log(arr)
找出数组中的最大值和第二大的值
let ary = [43,1,34,98,555,356]
function aryMethod(arr=[]) {
// 如果长度小于2 那么直接返回数组
if(arr.length<2)return [arr[0],null]
for (let i = 0
// 比较轮数
for (let j = 0
// 每轮比较次数,由于每次最后一个都是最大值,每轮少比较i次
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
}
}
}
return [arr[arr.length-1],arr[arr.length-2]]
}
let [max,second] = aryMethod(ary)||[]
console.log(max,second)
对象去重
let ary = [
{ id: 0, name: "小明" },
{ id: 1, name: "小张" },
{ id: 2, name: "小李" },
{ id: 3, name: "小孙" },
{ id: 1, name: "小周" },
{ id: 2, name: "小陈" },
]
function deWeightObj(arr){
let newObj = {}
let newArr = []
arr.forEach((item)=>{
if(!newObj[item.id]){
newArr.push(item)
console.log(newObj[item.id])
newObj[item.id] = true
}
})
return newArr
}
let result = deWeightObj(ary)
console.log(result)
数组去重
let arr = [11, 22, 33, 11, 55, 44, 55, 66, 22, 33]
function deWeight(ary) {
let obj = {}
let newArr = []
for (let i = 0
let cur = ary[i]
if (obj[cur] === cur) {
ary[i] = ary[ary.length - 1]
ary.length--
i--
continue
}
obj[cur] = cur
}
for(let i in obj){
newArr.push(obj[i])
}
return newArr
}
let result = deWeight(arr)
console.log(arr)
数组扁平化
let arr = [[1,2,2],[3,4,5,5],[6,7,8,9,[11,12,[14]]],10];
function flatten(ary){
return ary.toString().split(',').map(item=>{
return + item
})
}
let result = flatten(arr);
console.log(result);