手写indexof
function myIndexOf(str1, str2) {for(let i = 0; i < str1.length; i++) {let p1 = i, p2 = 0while(str1[p1] === str2[p2] && p2 < str2.length) {p2++p1++}if(p2 === str2.length) return i}return -1}
二分查找
// 二分查找function halfSearch(arr,key){var max, min,mid;min = 0;max = arr.length - 1;while(min<=max){mid = parseInt((min+max)/2);if(key>arr[mid]){min = mid +1;}else if(key<arr[mid]){max = mid -1;}else{return mid;}}return -1;}var arr=[1,2,3,5,6,7,8,10];var index = halfSearch(arr,6); // 4
数组去重
var arr=['12','32','89','12','12','78','12','32'];// 最简单数组去重法function unique1(array){var n = []; //一个新的临时数组for(var i = 0; i < array.length; i++){ //遍历当前数组if (n.indexOf(array[i]) == -1)n.push(array[i]);}return n;}arr=unique1(arr);// 速度最快, 占空间最多(空间换时间)function unique2(array){var n = {}, r = [], type;for (var i = 0; i < array.length; i++) {type = typeof array[i];if (!n[array[i]]) {n[array[i]] = [type];r.push(array[i]);} else if (n[array[i]].indexOf(type) < 0) {n[array[i]].push(type);r.push(array[i]);}}return r;}//数组下标判断法function unique3(array){var n = [array[0]]; //结果数组for(var i = 1; i < array.length; i++) { //从第二项开始遍历if (array.indexOf(array[i]) == i)n.push(array[i]);}return n;}es6方法数组去重arr=[...new Set(arr)];es6方法数组去重,第二种方法function dedupe(array) {return Array.from(new Set(array)); //Array.from()能把set结构转换为数组}
用js递归的方式写1到100求和?
function add(num1,num2){var num = num1+num2;if(num2+1>100){return num;}else{return add(num,num2+1)}}var sum =add(1,2);
js防抖
// 防抖 至少间隔多久执行// 执行一次后在单位时间内不能再次执行,如果在单位时间内再调用,则推迟该函数的执行。
function debounce(fn, time) {
let timer = null;
return function () {
clearTimeout(timer);
timer = setTimeout(fn, time);
}
}
js 节流
// 节流 单位时间内最多执行一次
function throttle(fn, time) {
let startTime = new Date();
let timer = null;
return function () {
clearTimeout(timer);
// 注意else里面没有给startTime赋值,因此总会走到if里面去,达到我们单位时间内最多执行一次的目的
const currentTime = new Date();
if(currentTime - startTime > time) {
startTime = currentTime;
fn();
} else {
timer = setTimeout(fn, time);
}
}
}
