Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript sort comparator function

Tags:

javascript

Basically I want to build a function which sorts objects in an array by one of the object's properties/member variables. I am preeeety sure that the comparator function is where the error is hidden, but I am not 100% sure.

The output I should get after the sort function is called is 1,2,3. I get 1,3,2 which means that it is unchanged

This is the entire js code (with some comments):

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();

EDIT: The solution is the following - As stated, the comparator function really was the problem, the correct way to write it is the following:

function compareFN(taskA, taskB) {
   return taskA.priority < taskB.priority;
}
like image 203
Stanimirovv Avatar asked Dec 07 '22 06:12

Stanimirovv


1 Answers

There are multiple problems with your comparator:

  1. It refers to the global task object instead of the objects being compared.
  2. It compares the object to itself.
  3. It is supposed to perform a three-way comparison.

Try:

var compareFN = function(a, b) {
    return a.priority - b.priority;
}
like image 117
NPE Avatar answered Dec 22 '22 15:12

NPE