写在文章之前的话:本人菜鸟一枚,写博客纯属分享。哪里写的不好或者写错了,请大家多多指教~
最近写游戏,需要做一个列表的道具领取功能,当你的等级到达一定的程度,就能领取道具,当道具领取后,需要把已领取的项,放到最后面。
类似于:(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 })
下章再说遇到的另一种排序情况
转载请注明出处和本文链接!