59

I'm really struggling on that but I cannot find a solution.

I have an array and I want to sort it by value (all integers). I thought, well let's use lodash, there sure must be a handy function for that.

Somehow I cannot figure out to do this though.

So far I got this:

myArray = [3, 4, 2, 9, 4, 2]

I got a result if I used this code:

myArray = _(myArray).sort();

But unfortunately the return value does not seem to be an array anymore. myArray.length is undefined after the sorting.

I found thousands of examples of lodash sorting array but always via key. https://lodash.com/docs#sortBy

Can somebody tell my how I can get the following return result as an array?:

[2, 2, 3, 4, 4, 9]

It can't be that difficult, but somehow I don't get it done...

Also sometimes I think that lodash documentation is a little complex. I'm probably just missing out an important detail...

3
  • Without lodash, you could just run myArray = myArray.sort()
    – Pete
    Commented Mar 9, 2015 at 20:08
  • 1
    @Pete actually using myArray.sort() will not work for numbers unfortunately as this javascript function actually sorts the numbers as if they are strings. So [3, 1, 2, 11234] would be sorted to [1, 11234, 2, 3]. You have to do some stupid arse transformation to make JS sort it as numbers. I recommend using Lodash's _.sortBy() if you can. See reference here.
    – FireDragon
    Commented Apr 14, 2018 at 1:35
  • 1
    @FireDragon I see that you are not insulting a person. But be careful with your langauge anyway please.
    – Yunnosch
    Commented Apr 14, 2018 at 1:37

2 Answers 2

97

You can use the sortBy() function here. You don't have to specify a key, as it will fall back to identity().

var myArray = [ 3, 4, 2, 9, 4, 2 ];

_.sortBy(myArray);
// → [ 2, 2, 3, 4, 4, 9 ]

_(myArray).sortBy().take(3).value();
// → [ 2, 2, 3 ]
2
  • Ok. thanks a lot. This is working for me. I also got a result by taking this code, although I don't really understand it and this kind of notation is nowhere written down in the lodash docs. myArray = _(myArray).sort().value();
    – Merc
    Commented Mar 10, 2015 at 6:56
  • 1
    Lodash adds array methods to wrappers, and it's mentioned here in the documentation. Commented Mar 10, 2015 at 11:54
0

Selected Answer is right but we can also do that task with sort()

const _ = require('lodash');
const myArray = [1,2,3,4,"A1","A10","A11","A12","A2","A3","A4","AZ","A5","B10", "B2", "F1", "F12", "F3",1,5,6,7,0,"a","b","a1"];

const sortFilter = _(myArray).sort().value();
console.log(sortFilter)

const sortByFilter = _(myArray).sortBy().value();
console.log(sortByFilter)
1
  • 2
    Using .sort() on the chain method is apparently using the underlying Array sort, which stringifies values before sorting. Which gives some surprising results, like _([1, 2, 10]).sort().value() returns [ 1, 10, 2 ].
    – leedm777
    Commented Feb 26, 2021 at 14:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.