所以我想知道我的代码有什么问题,使用compare参数获取排序返回所有数字的正确顺序但是5.我感觉它与我如何取消数字12,4,94有关,1但我是一个完整的新手,我很困惑。提前谢谢!
<!DOCTYPE html>
<html>
<head>
<title>Array Manipulation:Sort</title>
<script type="text/javascript">
var parts = [];
parts.push("5", "42", "12");
var removed = parts.pop();
alert(removed);
function compare(value1, value2) {
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
parts.unshift(12, 4, 94, 1);
alert(parts.sort()); //1, 12, 4, 42, 5, 94
alert(parts.sort(compare)); //1, 4, 12, 42, 5, 94
</script>
</head>
</html>
答案 0 :(得分:0)
更改此
var parts = [];
parts.push("5", "42", "12");
到
var parts = [];
parts.push(5, 42, 12);
所以你可以比较数字和比较:
function compare(value1, value2) {
return value1 - value2;
}
答案 1 :(得分:0)
将字符串与数字进行比较时,它会将两者都转换为数字,查找不同的第一个字符,然后根据该字符进行操作。
"5" > "42"
将字符串显式转换为数字以解决此问题。
function compare(value1, value2) {
value1 = +value1;
value2 = +value2;
答案 2 :(得分:0)
我建议将所有值都视为数字并返回delta,并使用隐式类型转换为数字。
function compare(value1, value2) {
return value1 - value2;
}
function compare(value1, value2) {
return value1 - value2;
}
var data = [12, 4, 94, 1, "5", "42"];
data.sort(compare);
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }