我想对带有对象的数组进行排序。返回的订单有误。
$(document).ready(() => {
const level = [
new Stage(5, 23),
new Stage(6, 25),
new Stage(29, 27),
new Stage(36, 33),
new Stage(21, 37),
new Stage(34, 51),
new Stage(37, 54),
new Stage(30, 58),
new Stage(12, 68),
new Stage(38, 70),
new Stage(10, 47)
];
level.sort((a, b) => a.position < b.position);
console.log(level);
});
function Stage(stageId, stagePosition) {
this.id = stageId;
this.position = stagePosition;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
当我越来越多地混淆数组时,数组会正确排序
$(document).ready(() => {
const level = [
new Stage(38, 70),
new Stage(5, 23),
new Stage(29, 27),
new Stage(36, 33),
new Stage(34, 51),
new Stage(37, 54),
new Stage(12, 68),
new Stage(21, 37),
new Stage(6, 25),
new Stage(10, 47)
];
level.sort((a, b) => a.position < b.position);
console.log(level);
});
function Stage(stageId, stagePosition) {
this.id = stageId;
this.position = stagePosition;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
这是怎么发生的?另一个比较功能是
$(document).ready(() => {
const level = [
new Stage(5, 23),
new Stage(6, 25),
new Stage(29, 27),
new Stage(36, 33),
new Stage(21, 37),
new Stage(34, 51),
new Stage(37, 54),
new Stage(30, 58),
new Stage(12, 68),
new Stage(38, 70),
new Stage(10, 47)
];
level.sort((a, b) => a.position - b.position);
console.log(level);
});
function Stage(stageId, stagePosition) {
this.id = stageId;
this.position = stagePosition;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
无论如何,这始终有效。
但是检查一个元素是否小于另一个元素或相减结果是否小于0的区别在哪里?
当前,它可以在真正混合的数组上工作
level.sort((a, b) => a.position < b.position);
这很好用
level.sort((a, b) => a.position - b.position);
答案 0 :(得分:8)
sort
希望回调返回:
a
应该位于b
之前为负数a
应该放在b
之后,则为正数a
和b
等价于排序目的,则为零您的回调返回布尔值,而不是数字。该布尔值被强制为一个数字(true
=> 1
,false
=> 0
),然后根据上述规则使用。取决于浏览器实现的排序算法(规范中未定义确切的算法)和精确的输入数据,这可能在有限的情况下适用,但不会使用不同的数据或稍有不同的算法。 / p>
您的
level.sort((a, b) => a.position - b.position);
是正确的方法(对于position
升序排序)。
$(document).ready(() => {
const level = [
new Stage(5, 23),
new Stage(6, 25),
new Stage(29, 27),
new Stage(36, 33),
new Stage(21, 37),
new Stage(34, 51),
new Stage(37, 54),
new Stage(30, 58),
new Stage(12, 68),
new Stage(38, 70),
new Stage(10, 47)
];
level.sort((a, b) => a.position - b.position);
console.log(level);
});
function Stage(stageId, stagePosition) {
this.id = stageId;
this.position = stagePosition;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 1 :(得分:-1)
您的排序条件不正确。使用a.position - b.position
是因为sort
期望返回一个数字值而不是布尔值。
$(document).ready(() => {
const level = [
new Stage(5, 23),
new Stage(6, 25),
new Stage(29, 27),
new Stage(36, 33),
new Stage(21, 37),
new Stage(34, 51),
new Stage(37, 54),
new Stage(30, 58),
new Stage(12, 68),
new Stage(38, 70),
new Stage(10, 47)
];
level.sort((a, b) => a.position - b.position);
console.log(level);
});
function Stage(stageId, stagePosition) {
this.id = stageId;
this.position = stagePosition;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>