排序默写第二遍
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>默写第二遍</title>
</head>
<body>
<button id="button"></button>
<script>
// <!-- 冒泡排序 -->
function bubbleSort(arr) {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
// 总结 已经掌握
// 选择排序
function selectionSort(arr) {
let minIndex;
for (let i = 0; i < arr.length - 1; i++) {
minIndex = i;
for (let j = i + 1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
[arr[minIndex], arr[i]] = [arr[i], arr[minIndex]];
}
return arr;
}
// 总结 console 写错,其他没毛病
// 快速排序
function quickSort(arr) {
if (arr.length <= 1) {
return arr;
}
let left = [];
let right = [];
let minIndex = Math.floor(arr.length / 2);
let minValue = arr[minIndex];
arr.splice(minIndex, 1);
for (let i = 0; i < arr.length; i++) {
if (arr[i] < minValue) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat(minValue, quickSort(right));
}
// 总结 1.求中间值写错了, 这种排序算法没有 减 1 因为只有一层循环,要遍历所有的!
// 二分法查找
function searching(arr, target) {
let start = 0;
let end = arr.length - 1;
let minIndex;
let minValue;
while (start <= end) {
minIndex = Math.floor((start + end) / 2);
minValue = arr[minIndex];
if (target === minValue) {
return minIndex;
} else if (target < minValue) {
end = minIndex - 1;
} else {
start = minIndex + 1;
}
}
return -1;
}
// 总结: Uncaught SyntaxError: Invalid or unexpected token 多了中文冒号;
// 数组扁平化处理
function flat(arr) {
return arr.reduce((total, cur) => {
return total.concat(Array.isArray(cur) ? flat(cur) : cur);
}, []);
}
// 总结 完全掌握;
// 打乱数组
function noSort(arr) {
for (let i = arr.length - 1; i >= 0; i--) {
let randomIndex = Math.floor(Math.random() * arr.length);
[arr[i], arr[randomIndex]] = [arr[randomIndex], arr[i]];
}
return arr;
}
// 总结: 完全掌握
// 深拷贝
function deepCopy(obj) {
let result = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === 'object' && obj[key] !== null) {
result[key] = deepCopy(obj[key]);
} else {
result[key] = obj[key];
}
}
}
return result;
}
// 总结 hasOwnProperty 写错 result[key] = deepCopy(obj[key]); 写错
// 防抖
function deBounce(func, delay) {
let timer;
return function () {
clearTimeout(timer);
let context = this;
let args = arguments;
timer = setTimeout(function () {
func.apply(context, args);
}, delay);
};
}
function payMoney() {
console.log('我要支付啦');
}
let button = document.getElementById('button');
button.addEventListener('click', deBounce(payMoney, 2000));
// 总结 掌握
// 节流
function throttle(func, delay) {
let old = 0;
return function () {
let now = Date.now();
let context = this;
let args = arguments;
if (now - old > delay) {
func.apply(context, args);
old = now;
}
};
}
button.addEventListener('click', throttle(payMoney, 3000));
// 总结 let old = 0; 应该写在外边,就像 timer
// 数组去重
function noRepeat(arr) {
return [...new Set(arr)];
}
// 函数柯里化
function add() {
let _args = [...arguments];
let _adder = function () {
_args.push(...arguments);
return _adder;
};
_adder.toString = function () {
return _args.reduce((total, cur) => total + cur, 0);
};
return _adder;
}
// 总结 let _args = [...arguments]; 写错了
// 生成器
function* A(x) {
yield x + 1;
yield x + 2;
yield x + 3;
yield x + 4;
}
let a = A(1);
console.log(a.next());
console.log(a.next());
console.log(a.next());
console.log(a.next());
console.log(a.next());
</script>
</body>
</html>
默写第二遍~

浙公网安备 33010602011771号