手写indexof

  1. function myIndexOf(str1, str2) {
  2. for(let i = 0; i < str1.length; i++) {
  3. let p1 = i, p2 = 0
  4. while(str1[p1] === str2[p2] && p2 < str2.length) {
  5. p2++
  6. p1++
  7. }
  8. if(p2 === str2.length) return i
  9. }
  10. return -1
  11. }

二分查找

  1. // 二分查找
  2. function halfSearch(arr,key){
  3. var max, min,mid;
  4. min = 0;
  5. max = arr.length - 1;
  6. while(min<=max){
  7. mid = parseInt((min+max)/2);
  8. if(key>arr[mid]){
  9. min = mid +1;
  10. }else if(key<arr[mid]){
  11. max = mid -1;
  12. }else{
  13. return mid;
  14. }
  15. }
  16. return -1;
  17. }
  18. var arr=[1,2,3,5,6,7,8,10];
  19. var index = halfSearch(arr,6); // 4

数组去重

  1. var arr=['12','32','89','12','12','78','12','32'];
  2. // 最简单数组去重法
  3. function unique1(array){
  4. var n = []; //一个新的临时数组
  5. for(var i = 0; i < array.length; i++){ //遍历当前数组
  6. if (n.indexOf(array[i]) == -1)
  7. n.push(array[i]);
  8. }
  9. return n;
  10. }
  11. arr=unique1(arr);
  12. // 速度最快, 占空间最多(空间换时间)
  13. function unique2(array){
  14. var n = {}, r = [], type;
  15. for (var i = 0; i < array.length; i++) {
  16. type = typeof array[i];
  17. if (!n[array[i]]) {
  18. n[array[i]] = [type];
  19. r.push(array[i]);
  20. } else if (n[array[i]].indexOf(type) < 0) {
  21. n[array[i]].push(type);
  22. r.push(array[i]);
  23. }
  24. }
  25. return r;
  26. }
  27. //数组下标判断法
  28. function unique3(array){
  29. var n = [array[0]]; //结果数组
  30. for(var i = 1; i < array.length; i++) { //从第二项开始遍历
  31. if (array.indexOf(array[i]) == i)
  32. n.push(array[i]);
  33. }
  34. return n;
  35. }
  36. es6方法数组去重
  37. arr=[...new Set(arr)];
  38. es6方法数组去重,第二种方法
  39. function dedupe(array) {
  40. return Array.from(new Set(array)); //Array.from()能把set结构转换为数组
  41. }

用js递归的方式写1到100求和?

  1. function add(num1,num2){
  2. var num = num1+num2;
  3. if(num2+1>100){
  4. return num;
  5. }else{
  6. return add(num,num2+1)
  7. }
  8. }
  9. 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);
}
}
}

https://juejin.cn/post/6844903669389885453#heading-4