感觉有一段时间没写博客,最近项目上面这两个是比较实在并且实用的方法。其中效率个人不谈,但是我都单独抽离成了方法,需要的同学自取。
/*数组排序算法
增加过滤空数组
* 第一个参数:排序的数组
*第二个参数:根据数组中的哪个字段排序
* 第三个字段:是升序还是降序,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);
i=i-1;//注意这里js的splice函数改变原数组是改变源数组,了解知识(js对象的赋值和复制)
}
}
}
//最后拼接两个数组得到新数组,把不同的放在了前面,这里根据业务需要来做
let newcoulist=newcou.concat(coulist2);
//console.log(newcou);
//返回新数组
return newcoulist
}