最近寫遊戲,須要作一個列表的道具領取功能,當你的等級到達必定的程度,就能領取道具,當道具領取後,須要把已領取的項,放到最後面。
相似於:(value =1說明已領取)segmentfault
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排序。
首先咱們先看看簡單點的排序:code
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的使用(二)遊戲