基本上我想建立一個函數,它通過對象的屬性/成員變量對數組中的對象進行排序。我很確定比較函數是隱藏錯誤的地方,但我不是100%確定的。JavaScript排序比較功能
調用排序功能後應該得到的輸出是1,2,3
。我得到1,3,2
這意味着它是不變的
這是整個js代碼(有一些評論):
var arr = [];
//object definition and creation
var main = document.getElementById("main");
var task = {
name: "",
priority: 0
};
//first
var one = Object.create(task);
one.priority = 1;
//secondd
var two = Object.create(task)
two.priority = 3;
//last
var three = Object.create(task);
three.priority = 2;
//append
arr.push(one);
arr.push(two);
arr.push(three);
//sort function
function sortT() {
arr.sort(compareFN);
}
//comperator function
function compareFN() {
return task.priority < task.priority;
}
function print() {
for (var i = 0; i < arr.length; i++) {
console.log(arr[i].priority);
}
}
//execution of the program
print();
sortT();
print();
編輯:該解決方案如下 - 如前所述,比較功能真有問題,把它寫的正確方法如下:
function compareFN(taskA, taskB) {
return taskA.priority < taskB.priority;
}
這是後到前,你會得到3,2,1 – dougajmcdonald
這種比較是錯誤的;請參閱NPE的答案以獲得正確的解決方案。 [MDN排序參考](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) –