此文为 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)    

   js中关于sort的排序(续) 随笔

  哈哈,这种方法虽然也可以。但是不建议,就像第一章所说的,接下来我们来看看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;
    })

  (完)

  

转载请注明出处和本文链接!

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄