js數組排序從小打到大和從大到小,數組分離相同和不一樣

    感受有一段時間沒寫博客,最近項目上面這兩個是比較實在而且實用的方法。其中效率我的不談,可是我都單獨抽離成了方法,須要的同窗自取。html

/*數組排序算法算法

增長過濾空數組
    * 第一個參數:排序的數組
    *第二個參數:根據數組中的哪一個字段排序
    * 第三個字段:是升序仍是降序,true(升序),false(降序)
    * */
    ,arrySort:function (arry,fil,t) {數組

//過濾空數組
//對於 false,null,0,undefiend,NaN直接取!獲得的都是true,所以這裏只須要在判斷空字符串"";
函數

let arryn=arry.filter(function (val) {
    return !(!val || val === "");
});

        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];code

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

        //console.log(setids);對象

       
            for (let k = 0; k < arry2.length; k++) {排序

for(let i=0;i<coulist.length;i++) {字符串


                if (coulist[i].filed == arry2[k].filed) {
                    //爲已經送券的打標記,標記已經送券,而後返回新數組
                    let cesh= coulist[i];
                    cesh.bindcheck="true";//當時業務須要標記分離出來的數據博客

                    newcou.push(coulist[i]);
                    //剔除相同部分數據,獲得不一樣數據,注意必須放在最後剔除,不然發生數據錯誤問題
                    coulist2.splice(i,1);

i=i-1;//注意這裏js的splice函數改變原數組是改變源數組,瞭解知識(js對象的賦值和複製)

                }
            }
        }
    //最後拼接兩個數組獲得新數組,把不一樣的放在了前面,這裏根據業務須要來作
        let newcoulist=newcou.concat(coulist2);
        //console.log(newcou);
        //返回新數組
        return newcoulist

    }