var arr = [
{name:"XM",age:20},
{name:"Jack",age:10},
{name:"Tom",age:30},
{name:"XH",age:25}
];
for(var i=0;i<arr.length;i++){
for(var j=0;j<arr.length-i;j++){
if(arr[i].age>arr[i+1].age){
var tmp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=tmp;
}
}
}
for (var j = 0; j < arr.length - i ; j++)多执行了一次,会出现 arr[j + 1].age的值找不到
应该改为for (var j = 0; j < arr.length - i-1 ; j++)
这就是个冒泡排序,但是你循环那块写错了,代码如下:
for(var i=0;i<arr.length;i++){
for(var j=0;j<arr.length-1;j++){
if(arr[j].age > arr[j+1].age){
var tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
还是不对的,报类型错误
//冒泡排序
for (var i = 0; i < arr.length - 1; i++) { //最后一个元素不用重复这一步,这里-1
for (var j = 0; j < arr.length - 1 - i; j++) { //这里也要-1,不然下面的arr[j + 1]就会越界
if (arr[j].age > arr[j + 1].age) { //用j不是用i
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
已解决,谢谢各位
额。。为啥不用sort, 一行搞定
arr.sort((a,b)=> a.age-b.age)