项目中常遇到处理数据排序的问题
数组对象排序
var arr = [
{ val:"张三", id:8 },
{ val:"李四", id:10 },
{ val:"小王", id:9 }
];
//比较函数
function sortFn(key){
return function(m,n){
var a = m[key];
var b = n[key];
//升序 a - b 降序 b - a
return a - b;
}
}
arr.sort(sortFn("id"));
console.log(arr);
//结果如下:
[{ val:"张三", id:8 },
{ val:"小王", id:9 },
{ val:"李四", id:10 }]
除了用sort排序 顺便总结一下js中数组的几种排序方式 (要看动画演示点击这里)
1、选择排序
第一次循环找到最大或最小放到首位,再找剩下的里面找到次小或大的,依次循环完成排序
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
//如果前一个比后一个大,就换位置
if(arr[i]>arr[j]){
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
2、冒泡排序
每次比较连个相邻的数,这样比较第一次能把最大或者最小的排在最后一位,之后就循环比较完成排序
for(var i=0; i<arr.length-1; i++){
for(var j=0; j<arr.length-1-i; j++){
//如果第一个比第二个大,就交换他们两个位置
if(arr[j]>arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
3、插入排序
将数组第一个元素看做标准值,把第二个元素到最后一个元素当成是未排序序列。
// 从下标1开始 循环遍历无序数组
for(let i = 1; i < arr.length; i++){
// 假设数组前i项都是有序状态
// 并且将p指向有序数组中的最后一个元素
let p = i - 1;
// 那么此时新元素就是有序数组中最后一个元素的下一个元素
const new_val = arr[p+1];
// 眼熟的 while 循环
while(new_val < arr[p]){
arr[p+1] = arr[p];
p--;
}
arr[p+1] = new_val
}
4、快速排序
function quickSort(arr){
if(arr.length<= 1){return arr}
let pivotIndex = Math.floor(arr.length/2)
let pivot = arr.splice(pivotIndex,1)[0]
let right =[]
let left = []
for ( let i = 0 ;i <arr.length ; i ++){
if(arr[i]<pivot){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
return quickSort(left).concat([pivot],quickSort(right))
}
- THE END -
最后修改:2024年6月24日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://mi-blog.cn/index.php/2020/01/17/js-%e6%95%b0%e7%bb%84%e6%8e%92%e5%ba%8f/