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
}