对数组按照年龄进行排序,js这个循环里貌似是下标越界,怎么解决呢

	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)