js中关于sort的排序

  写在文章之前的话:本人菜鸟一枚,写博客纯属分享。哪里写的不好或者写错了,请大家多多指教~

  最近写游戏,需要做一个列表的道具领取功能,当你的等级到达一定的程度,就能领取道具,当道具领取后,需要把已领取的项,放到最后面。

  类似于:(value =1说明已领取)

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

  我们需要的结果为: 3,4,8,9,10,1,2,5,6,7 。这是我们需要的排序后结果。

  但是,一开始我想的不是sort方法排序,我的想法是,只要把value = 1的项放到数组的最后面,不就好了吗?

  所以,我就写了下面代码:

        let num:number = 0;
        for(let i = 0,l = arr.length; i < l;i++){
        	if(arr[i].value == 1){
		      let str = arr.splice(i,1);
		      arr.unshift(str[0]); 
		      arr.push(str[0]);
		      num ++;
                  }
        }
        arr.splice(0,num);

  但是我觉得这样写可能不大好,建议大家也不要这样写。所以就寻求另一种解决方式,就用到了sort排序。

  首先我们先看看简单点的排序

    let arr1 = [15,10,2,1,9,23,50,80,4,8,32]
    arr1.sort((a,b)=>{
		if(a>b) {
			return 1
		}
		else if(a<b) {
			return -1
		}
		return 0
        })    

  这样能使用我们的arr1进行一个升序的排序,

  如果 a 大于 b,排序后 a 在 b 后面,此时 return 1;

  如果 a 小于 b,排序后 a 在 b 前面,此时 return -1。

  所以我们的arr排序可以这样写:

    arr.sort((a,b)=>{
		if(a.value == 1 && b.value != 1) {
			return 1
		}
		else if(a.value != 1 && b.value == 1) {
			return -1
		}
		return 0
  })

  下章再说遇到的另一种排序情况  

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

猜你喜欢

转载自www.cnblogs.com/BigNan/p/10690917.html