前端一些算法&日常实践

前端拖拽

Document - 锐客网body{ margin:0; padding:0; } .box{ background-color: aquamarine; width: 100px; height: 100px; position: absolute; top:0; left:0; cursor: move; }

大数相加
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);

排序
冒泡排序
前端一些算法&amp;日常实践
文章图片

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; }

插入排序(扑克牌)
前端一些算法&amp;日常实践
文章图片

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 = https://www.it610.com/article/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)); }

扁平化

    推荐阅读