共计 997 个字符,预计需要花费 3 分钟才能阅读完成。
最近写游戏,需要做一个列表的道具领取功能,当你的等级到达一定的程度,就能领取道具,当道具领取后,需要把已领取的项,放到最后面。类似于:(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
})
此外还有一种情况, 下章再说。js 中 sort 的使用 (二)