js中sort的运用(二)

js中sort的运用(一)

如今我们议论第二种状况的排序。
第一种状况是全部数组都是效劳端给过来的,所以内里的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的谁人项抛到数组的最后面就好了,所以:

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()内里就好了

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

(完)

    原文作者:oo大楠oo
    原文地址: https://segmentfault.com/a/1190000018869281
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞