daveyfaherty
daveyfaherty

Reputation: 4613

If block of conditional logs a message, but a variable is still being set in the else block

So I have this javascript function, reOrderJSON, and it orders an array, and, if the argument, order equates to "reverse", it reverse the array right after it has been sorted.

I also have a function bound to the click event of an associated link.

function reOrderJSON(subj,att,order,limit){

    subj.sort(function (a, b,order) {


        a = a[att],
        b = b[att];

        return a.localeCompare(b);


    });

    if(order === "reverse"){
        subj.reverse();
        console.log("Reverse passed a parameter to reOrderJSON")
    }



    layoutDate(subj,limit)
    return depos = subj;
}

function clickReorder(e){
        var orderingLink = e.target;
        var reverseOrder = "";

        var order = $(orderingLink).attr('data-order');
        if(order === "desc" || order === "undefined"){
            $(orderingLink).attr('data-order','asc');
            console.log("Order detected as "+order)
            reverseOrder = false;

        }else{
            $(orderingLink).attr('data-order','desc');
            console.log("Order detected as "+order)

            reverseOrder = "reverse";
        }

        var limit = $('.entries-per-page').val();

        reOrderJSON(e.data.orderedObject,$(e.target).data('assoc'),reverseOrder,limit);

        $('.result th').css('background','transparent');
        $(orderingLink).closest('th').css({'background':'pink'});


        return false;
}

$('.result').on("click", "th a", { orderedObject: depos }, clickReorder);

The link looks like this at the start:

<th><a href="#" data-assoc="county">County</a></th>

As you can tell, I'm logging some debug text to tell what's going on. The first time I click a link, I always get these two lines returned in the log: Order detected as undefined Reverse passed a parameter to reOrderJSON

I don't understand how this is happening, order should not be passed as "reverse" the first time. What am I missing here?

depos is an array object, if that makes any difference.

Upvotes: 0

Views: 43

Answers (1)

apsillers
apsillers

Reputation: 115970

Your comparison

order === "undefined"

is currently checking for the string "undefined", but you actually want to be checking for an undefined value in a variable.

You really want:

order == undefined   // no quotes -- it's not a string

Or, even better:

typeof order == "undefined"

since undefined can be overwritten in non-strict mode.

Upvotes: 3

Related Questions