Live data from Hacker News

How to write X in both Python 3 and JavaScript

sayazamurai.github.io

81–84 of 84 posts

Re: How to write X in both Python 3 and JavaScript

#81

Sort example doesn't take into account Javascript does lexicographical sorting? javascript: someList = [ 40, 2, 1, 3, 7, 99] someList.sort() Array(6) [ 1, 2, 3, 40, 7, 99 ] python: someList = [ 40, 2, 1, 3, 7, 99] sorted(someList) [1, 2, 3, 7, 40, 99]

It depends on whether or not you pass it a basic comparator function, eg: someArray.sort((a,b) => a - b); But yeah the example would have needed this for the less complex example as well to be accurate.

Common mistake when writing a sorting function, a-b is not safe in languages with integer overflow because it will give you incorrect sorting for large numbers. In javascript where everything is double you're probably safe from that kind of error but maybe NaN can give you problems instead?

Re: How to write X in both Python 3 and JavaScript

#83
post #62

Earlier quoted context omitted.

No, the compare function needs to be able to indicate when two values are equal, not just when one is smaller/larger than the other. Otherwise your sort function will return inconsistent results for compare(a, b) and compare(b, a) when both values are equal.

So someList.sort((a,b) => a => b) Would be better, because it produces a stable sort? `a - b` produces the same results, so equally valid?

(I'm assuming you meant "a >= b", not "a => b".)

That's still not a consistent comparison function, so the results are implementation-defined.

To be consistent, it's required, among others, that if cmp(a, b) == 0 then cmp(b, a) == 0. For "a >= b", this is not always true, e.g.:

  » cmp(0, 1) == 0
  true
  » cmp(1, 0) == 0
  false

Re: How to write X in both Python 3 and JavaScript

#84
post #81

Earlier quoted context omitted.

It depends on whether or not you pass it a basic comparator function, eg: someArray.sort((a,b) => a - b); But yeah the example would have needed this for the less complex example as well to be accurate.

Common mistake when writing a sorting function, a-b is not safe in languages with integer overflow because it will give you incorrect sorting for large numbers. In javascript where everything is double you're probably safe from that kind of error but maybe NaN can give you problems instead?

Too true.

‘a-b’ is safe enough in JS if you always know the input will be within a safe range regarding integer sizes and types.

NaN can give you all kinds of trouble so I’d usually test for that in a real case, either before the sort or in the comparator—if necessary.

Post reply on HN