js中a.sort(compare)对数组中的字符串按指定位置的数字进行排序在谷歌无效

随_声 2020-10-24 11:45:39
js中a.sort(compare)对数组中的字符串按指定位置的数字进行排序在谷歌无效,但在火狐有效,请问怎么解决。


var arr=["pens_0","pens_2","pens_3","pens_5","pens_1","pens_4"];

var compare = function (string1, string2) {
for(var i=1;i<string1.length;i++){
var val1 = string1[i];
var val2 = string2[i];
if (val1 < val2) {
return false;
} else if (val1 > val2) {
return true;
}
}
return false;
}
arr.sort(compare);
console.log(arr);


chrome,在chrome上没改变



火狐
...全文
516 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hello World, 2020-10-24
  • 打赏
  • 举报
回复
什么是“按指定位置的数字进行排序”? 如果是字符串排序的话也不用循环了,如果要循环,也得先判断两个是不是一样长吧? 不循环的话改成这样:
var arr=["pens_0","pens_2","pens_3","pens_5","pens_1","pens_4"];

var compare = function (val1, val2) {
	    if (val1 < val2) {
	        return -1;
	    } else if (val1 > val2) {
	        return 1;
	    }else{
			return 0;
        }
}
arr.sort(compare);
console.log(arr);
天际的海浪 2020-10-24
  • 打赏
  • 举报
回复
compare函数需要返回正数、负数或0 不是返回 true 或 false

var compare = function (string1, string2) {
    for(var i=1;i<string1.length;i++){
    	 var val1 = string1[i];
         var val2 = string2[i];
	    if (val1 < val2) {
	        return -1;
	    } else if (val1 > val2) {
	        return 1;
	    }
    }
    return 0;
}
天际的海浪 2020-10-24
  • 打赏
  • 举报
回复
引用 4 楼 随_声 的回复:
[quote=引用 1 楼 天际的海浪 的回复:]compare函数需要返回正数、负数或0 不是返回 true 或 false

var compare = function (string1, string2) {
    for(var i=1;i<string1.length;i++){
    	 var val1 = string1[i];
         var val2 = string2[i];
	    if (val1 < val2) {
	        return -1;
	    } else if (val1 > val2) {
	        return 1;
	    }
    }
    return 0;
}
不好意思,是我没写清楚,再问一下 如果数字为两位数或三位数,怎么解决,这样子好像就不行了 就像这样 [/quote]

var arr=["pens_0","pens_2","pens_13","pens_115","pens_1","pens_4"];

var compare = function (string1, string2) {
    var val1 = parseFloat(string1.match(/\d+/)[0]);
    var val2 = parseFloat(string2.match(/\d+/)[0]);
    return val1 - val2;
}
arr.sort(compare);
console.log(arr);
随_声 2020-10-24
  • 打赏
  • 举报
回复
引用 6 楼 Hello World, 的回复:
var arr=["pens_0","pens_12","pens_3","pens_5","pens_11","pens_4"];
//只比较以下划线分隔的数值部分
var compare = function (val1, val2) {
		//如果没有分隔符则当成一样大
		if(val1.indexOf('_')==-1 || val2.indexOf('_') ==-1)
			return 0;
		//拆分并转换成整形
		var n1 =parseInt(val1.split('_')[1]),
			n2 =parseInt(val2.split('_')[1]);
	    if (n1 < n2) {
	        return -1;
	    } else if (n1 > n2) {
	        return 1;
	    }else{
			return 0;
        }
}
arr.sort(compare);
console.log(arr);
非常感谢
Hello World, 2020-10-24
  • 打赏
  • 举报
回复
var arr=["pens_0","pens_12","pens_3","pens_5","pens_11","pens_4"];
//只比较以下划线分隔的数值部分
var compare = function (val1, val2) {
		//如果没有分隔符则当成一样大
		if(val1.indexOf('_')==-1 || val2.indexOf('_') ==-1)
			return 0;
		//拆分并转换成整形
		var n1 =parseInt(val1.split('_')[1]),
			n2 =parseInt(val2.split('_')[1]);
	    if (n1 < n2) {
	        return -1;
	    } else if (n1 > n2) {
	        return 1;
	    }else{
			return 0;
        }
}
arr.sort(compare);
console.log(arr);
随_声 2020-10-24
  • 打赏
  • 举报
回复
引用 2 楼 Hello World, 的回复:
什么是“按指定位置的数字进行排序”? 如果是字符串排序的话也不用循环了,如果要循环,也得先判断两个是不是一样长吧? 不循环的话改成这样:
var arr=["pens_0","pens_2","pens_3","pens_5","pens_1","pens_4"];

var compare = function (val1, val2) {
	    if (val1 < val2) {
	        return -1;
	    } else if (val1 > val2) {
	        return 1;
	    }else{
			return 0;
        }
}
arr.sort(compare);
console.log(arr);
不好意思,是我没写清楚,再问一下 如果数字为两位数或三位数,怎么解决,这样子好像就不行了 就像这样
随_声 2020-10-24
  • 打赏
  • 举报
回复
引用 1 楼 天际的海浪 的回复:
compare函数需要返回正数、负数或0 不是返回 true 或 false

var compare = function (string1, string2) {
    for(var i=1;i<string1.length;i++){
    	 var val1 = string1[i];
         var val2 = string2[i];
	    if (val1 < val2) {
	        return -1;
	    } else if (val1 > val2) {
	        return 1;
	    }
    }
    return 0;
}
不好意思,是我没写清楚,再问一下 如果数字为两位数或三位数,怎么解决,这样子好像就不行了 就像这样

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧