js数组排序从小打到大和从大到小,数组分离相同和不同

版权声明: https://blog.csdn.net/qq_32858649/article/details/84140769

    感觉有一段时间没写博客,最近项目上面这两个是比较实在并且实用的方法。其中效率个人不谈,但是我都单独抽离成了方法,需要的同学自取。

/*数组排序算法

增加过滤空数组
    * 第一个参数:排序的数组
    *第二个参数:根据数组中的哪个字段排序
    * 第三个字段:是升序还是降序,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];

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

扫描二维码关注公众号,回复: 5384846 查看本文章
i=i-1;//注意这里js的splice函数改变原数组是改变源数组,了解知识(js对象的赋值和复制)

                }
            }
        }
    //最后拼接两个数组得到新数组,把不同的放在了前面,这里根据业务需要来做
        let newcoulist=newcou.concat(coulist2);
        //console.log(newcou);
        //返回新数组
        return newcoulist

    }

猜你喜欢

转载自blog.csdn.net/qq_32858649/article/details/84140769
今日推荐