Array.sort works differently in Chrome and Firefox

Viewed 802

This question has been asked various times, but in most of the questions the person asking is doing something wrong.

Examples:

Array.sort working differently in chrome and firefox and IE

JavaScript. Array .sort() method returns different results for Chrome and Firefox if array contains duplicate numbers

Array.sort() behaves differently in Firefox and Chrome/Edge

Hopefully in my case, I'm doing something wrong as well. But the evidence against the browsers is pretty damning!

When you view the table in my website, it is sorted in opposite orders on Firefox and Chrome.

Here is my code:

function sortByKey(a, b) {
    console.log(`b: ${b.id} - a: ${a.id}`);
    return b[SORTING_KEY] - a[SORTING_KEY];
}

export function sortObjectValues(mappedObject) {
    console.log('BEGIN SORTING');
    return Object.values(mappedObject)
        .sort(sortByKey);
}

Here is the log output in Chrome:

BEGIN SORTING
b: 7920 - a: 7924
b: 7924 - a: 7931
b: 7920 - a: 7931
b: 7924 - a: 7931
b: 7931 - a: 7942
b: 7920 - a: 7942
b: 7942 - a: 7945
b: 7931 - a: 7945
b: 7924 - a: 7945
b: 7931 - a: 7952
b: 7945 - a: 7952
b: 7924 - a: 7952
b: 7931 - a: 7953
b: 7920 - a: 7953
b: 7942 - a: 7953
b: 7931 - a: 7959
b: 7924 - a: 7959
b: 7945 - a: 7959
b: 7931 - a: 9185
b: 7959 - a: 9185
b: 7924 - a: 9185
b: 7952 - a: 9185
b: 7945 - a: 9189
b: 7924 - a: 9189
b: 7952 - a: 9189
b: 9185 - a: 9189

And here is the output in Firefox:

BEGIN SORTING
b: 7924 - a: 7920
b: 7931 - a: 7920
b: 7931 - a: 7924
b: 7942 - a: 7920
b: 7942 - a: 7931
b: 7945 - a: 7920
b: 7945 - a: 7942
b: 7945 - a: 7931
b: 7945 - a: 7924
b: 7952 - a: 7920
b: 7952 - a: 7942
b: 7952 - a: 7931
b: 7952 - a: 7945
b: 7952 - a: 7924
b: 7953 - a: 7920
b: 7953 - a: 7942
b: 7953 - a: 7931
b: 7959 - a: 7920
b: 7959 - a: 7942
b: 7959 - a: 7953
b: 7959 - a: 7931
b: 7959 - a: 7945
b: 7959 - a: 7924
b: 9185 - a: 7920
b: 9185 - a: 7942
b: 9185 - a: 7953
b: 9185 - a: 7931
b: 9185 - a: 7945
b: 9185 - a: 7959
b: 9185 - a: 7924
b: 9185 - a: 7952
b: 9189 - a: 7920
b: 9189 - a: 7942
b: 9189 - a: 7953
b: 9189 - a: 7931
b: 9189 - a: 7945
b: 9189 - a: 7959
b: 9189 - a: 7924
b: 9189 - a: 7952
b: 9189 - a: 9185

To me, it seems like the order of the arguments has been reversed in Firefox. What is going on here??

Chrome userAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36

Firefox userAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0

When logging SORTING_KEY along with id, I get:

Chrome

BEGIN SORTING
b: SORTING_KEY=0 id=7920 - a: SORTING_KEY=6 id=7924
b: SORTING_KEY=6 id=7924 - a: SORTING_KEY=3 id=7931
b: SORTING_KEY=0 id=7920 - a: SORTING_KEY=3 id=7931
b: SORTING_KEY=6 id=7924 - a: SORTING_KEY=3 id=7931
b: SORTING_KEY=3 id=7931 - a: SORTING_KEY=1 id=7942
b: SORTING_KEY=0 id=7920 - a: SORTING_KEY=1 id=7942
b: SORTING_KEY=1 id=7942 - a: SORTING_KEY=4 id=7945
b: SORTING_KEY=3 id=7931 - a: SORTING_KEY=4 id=7945
b: SORTING_KEY=6 id=7924 - a: SORTING_KEY=4 id=7945
b: SORTING_KEY=3 id=7931 - a: SORTING_KEY=7 id=7952
b: SORTING_KEY=4 id=7945 - a: SORTING_KEY=7 id=7952
b: SORTING_KEY=6 id=7924 - a: SORTING_KEY=7 id=7952
b: SORTING_KEY=3 id=7931 - a: SORTING_KEY=2 id=7953
b: SORTING_KEY=0 id=7920 - a: SORTING_KEY=2 id=7953
b: SORTING_KEY=1 id=7942 - a: SORTING_KEY=2 id=7953
b: SORTING_KEY=3 id=7931 - a: SORTING_KEY=5 id=7959
b: SORTING_KEY=6 id=7924 - a: SORTING_KEY=5 id=7959
b: SORTING_KEY=4 id=7945 - a: SORTING_KEY=5 id=7959
b: SORTING_KEY=3 id=7931 - a: SORTING_KEY=9 id=9185
b: SORTING_KEY=5 id=7959 - a: SORTING_KEY=9 id=9185
b: SORTING_KEY=6 id=7924 - a: SORTING_KEY=9 id=9185
b: SORTING_KEY=7 id=7952 - a: SORTING_KEY=9 id=9185
b: SORTING_KEY=4 id=7945 - a: SORTING_KEY=8 id=9189
b: SORTING_KEY=6 id=7924 - a: SORTING_KEY=8 id=9189
b: SORTING_KEY=7 id=7952 - a: SORTING_KEY=8 id=9189
b: SORTING_KEY=9 id=9185 - a: SORTING_KEY=8 id=9189

Firefox

BEGIN SORTING
b: SORTING_KEY=6 id=7924 - a: SORTING_KEY=0 id=7920
b: SORTING_KEY=3 id=7931 - a: SORTING_KEY=0 id=7920
b: SORTING_KEY=3 id=7931 - a: SORTING_KEY=6 id=7924
b: SORTING_KEY=1 id=7942 - a: SORTING_KEY=0 id=7920
b: SORTING_KEY=1 id=7942 - a: SORTING_KEY=3 id=7931
b: SORTING_KEY=4 id=7945 - a: SORTING_KEY=0 id=7920
b: SORTING_KEY=4 id=7945 - a: SORTING_KEY=1 id=7942
b: SORTING_KEY=4 id=7945 - a: SORTING_KEY=3 id=7931
b: SORTING_KEY=4 id=7945 - a: SORTING_KEY=6 id=7924
b: SORTING_KEY=7 id=7952 - a: SORTING_KEY=0 id=7920
b: SORTING_KEY=7 id=7952 - a: SORTING_KEY=1 id=7942
b: SORTING_KEY=7 id=7952 - a: SORTING_KEY=3 id=7931
b: SORTING_KEY=7 id=7952 - a: SORTING_KEY=4 id=7945
b: SORTING_KEY=7 id=7952 - a: SORTING_KEY=6 id=7924
b: SORTING_KEY=2 id=7953 - a: SORTING_KEY=0 id=7920
b: SORTING_KEY=2 id=7953 - a: SORTING_KEY=1 id=7942
b: SORTING_KEY=2 id=7953 - a: SORTING_KEY=3 id=7931
b: SORTING_KEY=5 id=7959 - a: SORTING_KEY=0 id=7920
b: SORTING_KEY=5 id=7959 - a: SORTING_KEY=1 id=7942
b: SORTING_KEY=5 id=7959 - a: SORTING_KEY=2 id=7953
b: SORTING_KEY=5 id=7959 - a: SORTING_KEY=3 id=7931
b: SORTING_KEY=5 id=7959 - a: SORTING_KEY=4 id=7945
b: SORTING_KEY=5 id=7959 - a: SORTING_KEY=6 id=7924
b: SORTING_KEY=9 id=9185 - a: SORTING_KEY=0 id=7920
b: SORTING_KEY=9 id=9185 - a: SORTING_KEY=1 id=7942
b: SORTING_KEY=9 id=9185 - a: SORTING_KEY=2 id=7953
b: SORTING_KEY=9 id=9185 - a: SORTING_KEY=3 id=7931
b: SORTING_KEY=9 id=9185 - a: SORTING_KEY=4 id=7945
b: SORTING_KEY=9 id=9185 - a: SORTING_KEY=5 id=7959
b: SORTING_KEY=9 id=9185 - a: SORTING_KEY=6 id=7924
b: SORTING_KEY=9 id=9185 - a: SORTING_KEY=7 id=7952
b: SORTING_KEY=8 id=9189 - a: SORTING_KEY=0 id=7920
b: SORTING_KEY=8 id=9189 - a: SORTING_KEY=1 id=7942
b: SORTING_KEY=8 id=9189 - a: SORTING_KEY=2 id=7953
b: SORTING_KEY=8 id=9189 - a: SORTING_KEY=3 id=7931
b: SORTING_KEY=8 id=9189 - a: SORTING_KEY=4 id=7945
b: SORTING_KEY=8 id=9189 - a: SORTING_KEY=5 id=7959
b: SORTING_KEY=8 id=9189 - a: SORTING_KEY=6 id=7924
b: SORTING_KEY=8 id=9189 - a: SORTING_KEY=7 id=7952
b: SORTING_KEY=8 id=9189 - a: SORTING_KEY=9 id=9185

Map of id to SORTING_KEY is identical between the two browsers:

7920: 0
7924: 6
7931: 3
7942: 1
7945: 4
7952: 7
7953: 2
7959: 5
9185: 9
9189: 8
0 Answers
Related