js中sort的使用(二)

js中sort的使用(一)segmentfault

如今咱們討論第二種狀況的排序。
第一種狀況是整個數組都是服務端給過來的,因此裏面的value值也是服務端發的。那麼,若是服務端只發id給你呢?
這種狀況就是,你如今有一個數組arr1,服務端給你一個數組好比arr2。數組

let arr1 = [
    {id:1,name:"a"},
    {id:2,name:"b"},
    {id:3,name:"c"},
    {id:4,name:"d"},
    {id:5,name:"e"},
    {id:6,name:"f"},
    {id:7,name:"g"},
    {id:8,name:"h"},
    {id:9,name:"i"},
    {id:10,name:"j"}
];
let arr2 = [
    {id:1},
    {id:2},
    {id:3},
    {id:5}
];

arr2裏面的數據就是已領取的項,因此咱們排序後arr1的結果爲:4,6,7,8,9,10,1,2,3,5。
那麼咱們只要判斷arr1裏面的項的id有等於arr2裏面的項的id的時候,就把arr1的那個項拋到數組的最後面就好了,因此:code

let num = 0;
for(let key in arr2) {
    for(let i = 0,l = arr1.length; i < l; i++) {
         if(arr1[i].id == arr2[key].id){
        let str = arr1.splice(i,1);
            arr1.unshift(str[0]);
            arr1.push(str[0]);
            num ++;
        }
    }
}
arr1.splice(0,num)

哈哈,這種方法雖然也能夠。可是不建議,就像第一章所說的,接下來咱們來看看sort方法吧。
首先咱們爲arr2寫一個方法,用來判斷所傳數據是否存在於arr2中排序

function rank(val) {
 for(let key in arr2){
     if(val == arr2[key].id){
      return 1;
     } 
 }
 return 0;
 }

而後吧arr1中id的值傳入rank()裏面就好了get

arr1.sort((a,b)=>{
    if(rank(a.id) == 1 && rank(b.id) != 1){
        return 1;
    }else if(rank(a.id) != 1 && rank(b.id) == 1){
        return -1;
    }
    return 0;
})

(完)io

相關文章
相關標籤/搜索