js中关于sort的排序(续)
此文为 js中关于sort的排序 的第二章。附上第一章链接:https://www.cnblogs.com/BigNan/p/10690917.html
现在我们讨论第二种情况的排序。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。第一种情况是整个数组都是服务端给过来的,所以里面的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; })
(完)
转载请注明出处和本文链接!

更多精彩