1. 程式人生 > >js陣列排序從小打到大和從大到小,陣列分離相同和不同

js陣列排序從小打到大和從大到小,陣列分離相同和不同

    感覺有一段時間沒寫部落格,最近專案上面這兩個是比較實在並且實用的方法。其中效率個人不談,但是我都單獨抽離成了方法,需要的同學自取。

/*陣列排序演算法
    * 第一個引數:排序的陣列
    *第二個引數:根據陣列中的哪個欄位排序
    * 第三個欄位:是升序還是降序,true(升序),false(降序)
    * */
    ,arrySort:function (arry,fil,t) {
        let condition=function(field,tr){
            //第二個引數不傳遞情況下,預設從小到大排序
            if(tr==undefined){
                tr=-1;
            }else {
                tr=(tr) ? 1 : -1
            }
            return function (a,b) {
                a=a[field];
                b=b[field];

                if(a<b){
                    return tr*-1;
                }
                if(a>b){
                    return tr*1;
                }
                return 0;
            }
        };
        return arry.sort(condition(fil,t));
    }
/*
    兩個陣列區分相同和不同
引數1:需要篩選的陣列,最大的陣列
引數2:作為標記的陣列,
引數3:拿來做比較的欄位
*/
,separate:function (coulist,arry2,filed) {
        
        let newcou=[];
        let coulist2=coulist;

        //console.log(setids);

        for(let i=0;i<coulist.length;i++) {
            for (let k = 0; k < arry2.length; k++) {
                if (coulist[i].filed == arry2[k].filed) {
                    //為已經送券的打標記,標記已經送券,然後返回新陣列
                    let cesh= coulist[i];
                    cesh.bindcheck="true";//當時業務需要標記分離出來的資料

                    newcou.push(coulist[i]);
                    //剔除相同部分資料,得到不同資料,注意必須放在最後剔除,否則發生資料錯誤問題
                    coulist2.splice(i,1);

                }
            }
        }
    //最後拼接兩個陣列得到新陣列,把不同的放在了前面,這裡根據業務需要來做
        let newcoulist=newcou.concat(coulist2);
        //console.log(newcou);
        //返回新陣列
        return newcoulist

    }