By using our mini forum, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy

Q: Order Rectangles (task with JavaScript object composition)

+2 votes

You will be passed a few pairs of widths and heights of rectangles, create objects to represent the rectangles. The objects should additionally have two functions area - that returns the area of the rectangle and compareTo - that compares the current rectangle with another and produces a number  signifying if the current rectangle is smaller (negative number), equal (0) or larger(positive number) than the other rectangle.

The input will come as an array of arrays - every nested array will contain exactly 2 numbers the width and the height of the rectangle.

The output must consist of an array of rectangles (objects) sorted by their area in descending order as a first criteria and by their width in descending order as a second criteria.  


Sample Input:



[{width:5, height:12, area:function(), compareTo:function(other)},

{width:10, height:5, area:funciton(),compareTo:function(other)}]

Sample Input:

[[10,5], [3,20], [5,12]]


[{width:5, height:12, area:function(), compareTo:function(other)},

{width:3, height:20, area:funciton(),compareTo:function(other)},

{width:10, height:5, area:funciton(),compareTo:function(other)}]]

asked in JavaScript category by user golearnweb

1 Answer

+1 vote

Here is my JavaScript code (solution):

function orderRectangles(arr) {

    let rectArr = [];

    for (let arg of arr) {
        rectArr.push(createRect(arg[0], arg[1]));

    function createRect(width, height) {
        let rect = {
            width: width,
            height: height,
            area: () => rect.width * rect.height,
            compareTo: function (other) {
                let result = other.area() - rect.area();
                return result || (other.width - rect.width);
                // if result = 0 (false), return the difference, if that is 0, return false.
        return rect;

    rectArr.sort((a, b) => a.compareTo(b));
    return rectArr;


console.log(orderRectangles([[10, 5], [3, 20], [5, 12]]));


answered by user ak47seo