前端拖拽

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title>Document</title>  <style>    body{      margin:0;      padding:0;    }    .box{      background-color: aquamarine;      width: 100px;      height: 100px;      position: absolute;      top:0;      left:0;      cursor: move;    }  </style></head><body> <div class="box" id='box'>      </div></body><script>  // 鼠标挪动过快,鼠标会脱离拖拽的盒子,在盒子里面鼠标挪动无奈触发盒子的mousemove,盒子不会挪动,  let dom = document.getElementById('box')  console.log('dom',dom);  dom.addEventListener('mousedown', down)  function down(e){    this.initialScreenX = e.screenX;    this.initialScreenY = e.screenY;    this.CLickX = e.clientX;    this.ClickY = e.clientY;    this.BoxX = this.offsetLeft;    this.BoxY = this.offsetTop;    this._MOVE = move.bind(this)    this._UP = up.bind(this);    document.addEventListener('mousemove', this._MOVE);    document.addEventListener('mouseup', this._UP);    // this.setCapture();  }  function move (e){    let curBoxX = e.clientX - this.CLickX + this.BoxX;    let curBoxY = e.clientY - this.ClickY + this.BoxY;    if(curBoxX < 0){      curBoxX = 0    }     if(curBoxY < 0){      curBoxY = 0    }     dom.style.left = curBoxX  + 'px';    dom.style.top = curBoxY + 'px';  }  function up(e){     document.removeEventListener('mousemove', dom._MOVE)     document.removeEventListener('mouseup', dom._UP)    //  this.releaseCapture();  }</script></html>

大数相加

function add(str1,str2){  let num1 = str1.split('').reverse();  let num2 = str2.split('').reverse();  console.log(num1, num2)  let nextNum = 0;  let total = [];  for(let i = 0;i < num2.length;i++){    let curNum = 0;    if(num1[i]){      curNum = Number(num1[i]) + Number(num2[i]) + Number(nextNum);      if(curNum >= 10){         nextNum = String(curNum)[0];         total.push(String(curNum)[1]);      } else {        nextNum = 0;        total.push(curNum)      }    } else {      curNum = Number(num2[i]) + nextNum;      if(curNum >= 10){        nextNum = String(curNum)[0];        total.push(String(curNum)[1]);      } else {        nextNum = 0        total.push(curNum)      }    }  }  return total.reverse().join('');}let d = add(             "123456789123456789123456789123456789123456789123456734","1241519123456789123456789123456789123456789123456789123451234567891")

数组去重

去重let arr = [12, 23, 12, 15, 25, 23, 25, 14,16];let a = Array.form(new Set(arr))let b = [...new Set(arr)]let newArr = []; // 第一种计划// 拿出以后项和前面的进行比拟,只须要length -1 项和前面比拟for(let i = 0; i < arr.length - 1;i++){  let item = arr[i];  args = arr.slice(i+1); // 以后项后的所有数据  if(args.indexof(item) > -1){    // 如果以后我的项目蕴含能够删除,也能够放入新数组    // 第二种    // arr.splice(i,1);    // splice 原来数组扭转,如果i++,则会数组塌陷    // 性能不好,以后项删除,前面索引都要扭转    // i--;    //第三种    // arr[i] = null;    // arr[i] = arr[arr.length -1];    // arr.length --;    // i--;  } else {    // newArr.push(item)  }}// arr.filter(item => item !== null);// 对象键值对, 那数组的每项向新容器中存,如果有把当项干掉// let obj = {}// for(let i = 0; i < arr.length; i++){//   let item = arr[i];//   if(typeof obj[item] !== 'undefined'){//     arr[i] =  arr[arr.length - 1];//     arr.length--;//     i--;//     continue;//   }//   obj[item] = item;// }// console.log(arr);

排序

冒泡排序

function Bubble(arr){  let temp = null;  for(let i = 0; i < arr.length-1;i++){    for(let j = 0;j < arr.length-1-i;j++){      if(j[i] > j[i+1]){        // 以后项大于后一项        temp = j[i];        j[i] = j[i+1]        j[i+1] = temp;      }    }  }  return arr;}

插入排序(扑克牌)

function insert(arr){// 1、筹备一个新数组,用来存储抓到手里的牌,开始先抓一张牌进来let handle = [arr[0]];// 2、从第二项开始顺次抓牌,始终到台面上的牌抓光for( let i= 1; i< arr.length;i++){ // a 是新抓的牌 let a = arr[i]; // 和 handle手里的牌顺次比拟 for(let j = handle.length -1;j >= 0;j--){   // 每一次要比拟手里的牌, 从大到小比拟   let b = handle[j];   // 如果以后新牌A比要比拟的牌B大了,把A放到B的前面;   if( a > b){     handle.splice(j+1,0,a);     break;   }   //曾经比到第一项, 咱们把新牌放到手中最后面即可   if(j == 0){    handle.unshift(a)   } }}  return handle}

疾速排序(两头值,大右小左,顺次递归,最初合并)

function quick(arr){ // 4、完结递归,当arr中小于等于一项,则不必解决 if(arr.length <= 1){   return arr } // 1、找到数组中的两头项,在原有的数组中把他移除  let middleIndex = Math.floor(arr.length/2); let middleValue = arr.splice(middleIndex,1)[0];// 2、筹备左右两个数组,循环剩下数组中的每一项,比以后项小的放在右边数组中,反之放到左边的数组中 let arrLeft = []; let arrRight = []; for(let i = 0; i< arr.length;i++){  let item = arr[i];  item < middleValue? arrLeft.push(item) : arrRight.push(item);  }// 3、递归形式让左右两边的数组继续这样的解决,始终到左右两边都排好序了,(最初让右边+ 两头+ 左边拼接成为最初的后果)return quick(arrLeft).concat(middleValue, quick(arrRight));}

扁平化