I have this code:
function some_object(...) { this.data = {...}; this.do_something = function(...) { var arr = [...]; arr.sort(function (a, b) { return this.data[a] - this.data[b]; }); } }
However it's not working I think because this
cannot be accessed in sort
- another this
is seen there for some reason, not the this
of enclosing outer object.
What to do? thanks
JavaScript by default uses insertion sort for the sort() method. This means that it is not appropriate when sorting large data sets. When dealing with large data sets, one should consider other sorting algorithms such as merge sort.
You can bind the "outer" instance to the "inner" function by invoking the bind method on the inner function. Learn more at MDN. Or use an arrow function. I see you answered in 2016 so that should be an option.
The different this
is because the the anonymous function (its own closure) called by arr.sort
calls the function with this
being set to a different item than your main object. In an Array.sort, I am not actually sure what this
is set to, but it is probably the Array you are sorting. A normal work around in this situation is to use another variable:
function some_object(...) { var so = this; // so = current `this` this.data = {...}; this.do_something = function(...) { var arr = [...]; arr.sort(function (a, b) { return so.data[a] - so.data[b]; }); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With