数组去重 数组排序的方法 js实现

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