js:陣列自定義排序
寫在前面:沒想到我的一篇對IDE
評論的文章,得到了十幾條評論,真是慚愧。寫的具體程式設計知識點的文章,倒是鮮有評論。~ 23333
陣列中已經存在兩個可以直接用來重排序的方法:reverse()
和sort()
。
reverse()
方法用於反轉陣列。
預設情況下,sort()
方法按升序排列陣列項–即最小值在最前面,最大值在最後面。為了實現排序,sort()
方法會呼叫每個陣列項的toString()
轉型方法,然後比較得到的字串,以確定如何排序。即使陣列的每一項都是數值,sort()方法比較的也是字串
var values = [0 ,1 , 5, 10 ,15];
values.sort();
console.log(values); // 0,1,10,15,5
sort()方法可以接受一個比較函式作為引數,以便我們指定哪個值位於哪個值的前面
比較函式接受兩個引數,如果第一個引數應該位於第二個之前則返回一個負數,如果兩個引數相等則返回0,如果第一個引數應該位於第二個引數之後則返回一個正數。如下所示:
var stu1 = {
name: "python", age: 80, grade: 99,
toString: function () {
return this.name + " , " + this.age + " , " + this.grade;
}
};
var stu2 = {
name: "javascript", age: 30, grade: 88, toString: function () {
return this.name + " , " + this.age + " , " + this.grade;
}
};
var stu3 = {
name: "php", age: 18, grade: 59, toString: function () {
return this.name + " , " + this.age + " , " + this.grade;
}
};
var stu4 = {
name: "vb", age: 50, grade: 70, toString: function () {
return this.name + " , " + this.age + " , " + this.grade;
}
};
var stu5 = {
name: "shell", age: 60, grade: 70, toString: function () {
return this.name + " , " + this.age + " , " + this.grade;
}
};
var stu6 = {
name: "java", age: 40, grade: 99, toString: function () {
return this.name + " , " + this.age + " , " + this.grade;
}
};
var langArr = [stu1, stu2, stu3, stu4, stu5, stu6];
console.log("排序前:" + langArr);
console.log("-------------------");
function compare(a, b) {
if (a.grade > b.grade) {
return -5;
} else if (a.grade === b.grade) {
return 0;
} else {
return 5;
}
} // todo:簡單排序,僅僅通過分數進行排序
function cmp(a, b) {
if (a.grade > b.grade) {
return -5;
} else if (a.grade === b.grade) {
// return 0;
if (a.age < b.age) {
return -4;
} else if (a.age === b.age) {
return a.name.localeCompare(b.name);
} else {
return 4;
}
} else {
return 5;
}
} // todo:複雜排序,先比較分數,然後是年齡,最後是名字字串
// langArr.sort(compare);
langArr.sort(cmp);
console.log("排序後:" + langArr);
輸出顯示:
排序前:python , 80 , 99,javascript , 30 , 88,php , 18 , 59,vb , 50 , 70,shell , 60 , 70,java , 40 , 99
-------------------
排序後:java , 40 , 99,python , 80 , 99,javascript , 30 , 88,vb , 50 , 70,shell , 60 , 70,php , 18 , 59
從輸出結果可以看到,的確如我們預期:先比較分數,然後是年齡,最後是名字字串。
寫在後面:對於javascript
,我之前放棄了N
次,現在又想拾起,所以開始看這相關的資料了。~
相關文章
- js實現的陣列自定義排序介紹JS陣列排序
- Javascript陣列排序sort方法和自定義排序方法JavaScript陣列排序
- js陣列排序JS陣列排序
- 1122. 陣列的相對排序(計數排序 / 自定義排序)陣列排序
- js陣列排序整理JS陣列排序
- PAT乙級——1092(陣列排序 自定義sort)Java實現陣列排序Java
- js陣列排序和打亂JS陣列排序
- js 陣列返回,資料排序JS陣列排序
- nodejs 命令列、自定義NodeJS命令列
- js 漢字陣列按拼音排序JS陣列排序
- Javascript自定義陣列刪除方法remove()JavaScript陣列REM
- 陣列排序陣列排序
- js陣列元素排序程式碼例項JS陣列排序
- MySQL自定義排序MySql排序
- SQL自定義排序SQL排序
- JS陣列隨機排序的三種方法JS陣列隨機排序
- 陣列的排序陣列排序
- 物件陣列排序物件陣列排序
- JavaScript 陣列排序JavaScript陣列排序
- PHP開發之自定義函式及陣列PHP函式陣列
- JS陣列中的apply含義JS陣列APP
- Python自定義排序Python排序
- js 陣列元素大小排序例項程式碼JS陣列排序
- js陣列由小到大排序程式碼例項JS陣列排序
- js中陣列(Array)的排序(sort)注意事項JS陣列排序
- 為什麼處理排序陣列比未排序陣列快排序陣列
- 多維陣列排序陣列排序
- 陣列氣泡排序陣列排序
- 陣列選擇排序陣列排序
- javascript 陣列快速排序JavaScript陣列排序
- 陣列多重排序陣列排序
- c# 陣列排序C#陣列排序
- 二維陣列排序陣列排序
- 陣列二:使用陣列可變函式為陣列排序陣列函式排序
- PHP使用使用者自定義的比較函式對陣列中的值進行排序PHP函式陣列排序
- 自定義列舉
- ***PHP陣列排序+php二維陣列排序方法(PHP比較器)PHP陣列排序
- Java 對映 自定義排序Java排序