Javascript陣列排序sort方法和自定義排序方法
前言
針對一個陣列進行排序,一個很常見的需求.尤其在後端.當然,前端也是有這個需求的.
當然,陣列排序,是有現成的方法的.就是sort()
方法.
我們先開看下這個.
標準答案,sort方法
var arr = [45,98,67,57,85,6,58,83,48,18];
console.log('原陣列');
console.log(arr);
console.log('sort方法從小到大排序');
console.log(arr.sort(function(a,b){return a-b}));
console.log('sort方法從大到小排序');
console.log(arr.sort(function(a,b){return b-a}));
執行結果如下:
這裡需要注意的是,sort
預設是按照字母順序來進行排序的.因此,我們在排列數字的時候,需要一個自定義函式.
如上面的程式碼
function(a,b){return a-b}
這就是一個從小到大的排序函式.看上去好簡單的樣子,但是我不理解,所以,我根據我的想法,來實現排序吧~
我的答案,for方法排序
var arr = [45,98,67,57,85,6,58,83,48,18];
console.log('原陣列');
console.log(arr);
console.log('for方法從小到大排序');
console.log(arrSortMinToMax(arr));
console.log('for方法從大到小排序');
console.log(arrSortMaxToMin(arr));
// 找陣列中最小的值
function arrMinNum(arr){
var minNum = Infinity, index = -1;
for (var i = 0; i < arr.length; i++) {
if (arr[i]<minNum) {
minNum = arr[i];
index = i;
}
};
return {"minNum":minNum,"index":index};
}
// 返回陣列從小到大排序結果
function arrSortMinToMax(arr){
var arrNew = [];
var arrOld = arr.concat();
for (var i = 0; i < arr.length; i++) {
arrNew.push(arrMinNum(arrOld).minNum);
arrOld.splice(arrMinNum(arrOld).index,1)
};
return (arrNew);
}
// 找陣列中最大的值
function arrMaxNum(arr){
var maxNum = -Infinity, index = -1;
for (var i = 0; i < arr.length; i++) {
if (arr[i]>maxNum) {
maxNum = arr[i];
index = i;
}
};
return {"maxNum":maxNum,"index":index};
}
// 返回陣列從大到小排序結果
function arrSortMaxToMin(arr){
var arrNew = [];
var arrOld = arr.slice(0);
for (var i = 0; i < arr.length; i++) {
arrNew.push(arrMaxNum(arrOld).maxNum);
arrOld.splice(arrMaxNum(arrOld).index,1);
};
console.log(arr)
return (arrNew);
}
執行結果如下圖所示
我的方法中的知識點
- 當一個函式需要返回多條資料的時候,使用json物件格式比較方便.如上面的
return
{"minNum":minNum,"index":index}; 如果使用
var arrOld = arr
這種方法來複制一個陣列,並且,對arrOld
進行操作的話,是會影響到arr
這個原陣列的.因為javascript分原始型別與引用型別(與java、c#類似)。Array
是引用型別。arrOld
得到的是引用,所以對arrOld
的修改會影響到arr。- 複製陣列的方法(一)
var arrOld = arr.concat();
,原理:concat()
函式是用於拼接多個陣列的函式,這種寫法相當於拼接自己.也就是複製了. - 複製陣列的方法(二)
var arrOld = arr.slice(0)
, 原理:slice()
函式是一個擷取陣列的函式,設定值為0,則是全部擷取,相當於複製了.
- 複製陣列的方法(一)
splice()
方法用於插入、刪除或替換陣列的元素。這裡是使用了其刪除陣列中指定位置的特性.- 我的方法和
sort
方法的差異.
- 我的方法沒有修改原陣列,而
sort
是在原陣列的基礎上進行的修改. - 我的方法返回的是一個新陣列,原陣列並沒有消失或者改變.(好像和上面一句是一個意思….)
- 我的方法沒有修改原陣列,而
- 排序是程式設計中非常非常基礎並且非常非常重要的知識點.
sort
排序在執行大量資料的情況下,效率還是比較低的.當然,我的方法的效率也是很低的.
相關文章
- JavaScript中陣列Array.sort()排序方法詳解JavaScript陣列排序
- JavaScript 使用sort()方法從數值上對陣列進行排序JavaScript陣列排序
- js:陣列自定義排序JS陣列排序
- PAT乙級——1092(陣列排序 自定義sort)Java實現陣列排序Java
- 關於js陣列方法sort()負數排序的陷阱JS陣列排序
- Collections sort()排序方法排序
- 1122. 陣列的相對排序(計數排序 / 自定義排序)陣列排序
- JavaScript 陣列排序JavaScript陣列排序
- 陣列進行排序的方法陣列排序
- Collections.sort()方法,字元排序字元排序
- JavaScript 中陣列 sort() 方法的基本使用JavaScript陣列
- Javascript - 陣列和陣列的方法JavaScript陣列
- Python中用來排序的方法sort、sortedPython排序
- Javascript中的陣列物件排序JavaScript陣列物件排序
- 陣列排序陣列排序
- 舉例說明陣列的排序方法有哪些?陣列排序
- 用原生Js利用sort方法 實現圖片的正 倒排序和隨機排序JS排序隨機
- JavaScript陣列方法JavaScript陣列
- sort排序排序
- Python自定義排序Python排序
- MySQL自定義排序MySql排序
- JavaScript 陣列排序 與 求最大值JavaScript陣列排序
- 陣列的去重和排序陣列排序
- js陣列排序和打亂JS陣列排序
- Arr::sort()輔助函式對多維陣列的排序函式陣列排序
- js陣列排序JS陣列排序
- 物件陣列排序物件陣列排序
- 陣列的排序陣列排序
- JavaScript陣列方法大全JavaScript陣列
- JavaScript陣列小方法JavaScript陣列
- JavaScript陣列方法(splice)JavaScript陣列
- javascript陣列常用方法JavaScript陣列
- 使用sort方法實現陣列升序降序陣列
- 在命令列用 sort 進行排序命令列排序
- JavaScript 陣列中元素隨機打亂排序JavaScript陣列隨機排序
- 記一次產品需求中的陣列排序方法陣列排序
- 為什麼處理排序陣列比未排序陣列快排序陣列
- c# 陣列排序C#陣列排序