let ary = [12,23,12,15,25,15,25,23,16]; 数组去重 1.es6的SET let arr = Array.from(new Set(ary)); console.log(arr); 2.拿出当前项和后面的内容进行比较 for(let i = 0;i<ary.length-1 ; i++) { let item = ary[i], args = ary.slice(i+1); if(args.indexOf(item)>-1) { //包含:我们可以把当前项干掉 //splice 删除 // 1.原来数组改变,这样如果i继续++,则会产生数组塌陷 // 2.性能不好,当前项一旦删除,后面项索引都要变 ary.splice(i,1); i--; } } console.log(ary); 3. let arr = []; for(let i = 0;i<ary.length ; i++) { let item = ary[i], args = ary.slice(i+1); if(args.indexOf(item)>-1) { //包含:我们可以把当前项干掉 //splice 删除 // 1.原来数组改变,这样如果i继续++,则会产生数组塌陷 // 2.性能不好,当前项一旦删除,后面项索引都要变 }else{ arr.push(item); } } console.log(arr); 键值对 4.拿数组中的每项向新容器中存储,如果已经存储过了,把当前项干掉 let obj = {}; for(let i=0;i<ary.length;i++){ let item = ary[i]; if(typeof obj[item] !== ‘undefined‘) { ary[i] = ary[ary.length-1]; ary.length-1; i--; continue; } obj[item] = item; } obj = null; console.log(ary); 先排序 5.相邻项的处理方案 正则 ary.sort((a,b)=>a-b); ary = ary.join(‘@‘) + ‘@‘; let reg = /(\d+@)\1*/g, arr = []; ary.replace(reg,(val,group1)=>{ // arr.push(parseFloat(group1)); arr.push(Number(group1.slice(0,group1.length-1))); }) console.log(arr); 数组排序 冒泡排序 function bubble(ary) { let temp = null; //外层循环控制比较的轮数 for(let i = 0;i<ary.length-1;i++) { //里层循环控制每一轮比较的次数j for(let j=0;j<ary.length-1-i;j++) { if(ary[j] > ary[j+1]){ //当前项大于后一项 temp = ary[j]; ary[j] = ary[j+1]; ary[j+1] = temp; } } } return ary; } let ary = [12,8,24,16,1]; ary = bubble(ary); console.log(ary); 排序 插入排序 function insert(ary) { //1.准备一个新数组,用来存储抓到手里的牌,开始先抓一张牌进来 let handle = []; handle.push(ary[0]); //2.从第二项开始依次抓牌,一直到把台面上的牌抓光 for(let i=1;i<ary.length;i++) { //A是新抓的牌 let A = ary[i]; //和手里的牌依次比较(从后往前比) 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; } let ary = [12,8,24,16,1]; ary = insert(ary); console.log(ary); //排序 快速排序 function quick(ary) { //结束递归 if(ary.length<=1) { return ary; } //找到数组的中间项,在原有的数组中把他移除 let middleIndex = Math.floor(ary.length/2); let middleValue = ary.splice(middleIndex,1)[0]; //准备左右两个数组,循环剩下数组中的每一项,比当前项小的放到左边数组中,反之放到右边数组 let aryLeft = []; let aryRight = []; for(let i = 0;i<ary.length;i++) { let item = ary[i]; item < middleValue ? aryLeft.push(item) : aryRight.push(item); } //最后让左边+中间+右边拼接成为最后的结果 return quick(aryLeft).concat(middleValue,quick(aryRight)); } let ary = [12,8,24,16,1]; ary = quick(ary); console.log(ary);
原文:https://www.cnblogs.com/isuansuan/p/12837552.html