# [javascript] How to sort an array based on the length of each element?

I have an array like this:

``````arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"
``````

After sorting, the output array should be:

``````arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"
``````

I mean, I want in the descending order of the length of each element.

This question is related to `javascript` `arrays` `string` `sorting`

If you want to preserve the order of the element with the same length as the original array, use bubble sort.

``````Input = ["ab","cdc","abcd","de"];

Output  = ["ab","cd","cdc","abcd"]
``````

Function:

``````function bubbleSort(strArray){
const arrayLength = Object.keys(strArray).length;
var swapp;
var newLen = arrayLength-1;
var sortedStrArrByLenght=strArray;
do {
swapp = false;
for (var i=0; i < newLen; i++)
{
if (sortedStrArrByLenght[i].length > sortedStrArrByLenght[i+1].length)
{
var temp = sortedStrArrByLenght[i];
sortedStrArrByLenght[i] = sortedStrArrByLenght[i+1];
sortedStrArrByLenght[i+1] = temp;
swapp = true;
}
}
newLen--;
} while (swap);
return sortedStrArrByLenght;
}
``````

We can use Array.sort method to sort this array.

#### ES5 solution

_x000D_
_x000D_
``````var array = ["ab", "abcdefgh", "abcd"];

array.sort(function(a, b){return b.length - a.length});

console.log(JSON.stringify(array, null, '\t'));``````
_x000D_
_x000D_
_x000D_

For ascending sort order: `a.length - b.length`

For descending sort order: `b.length - a.length`

#### ES6 solution

Attention: not all browsers can understand ES6 code!

In ES6 we can use an arrow function expressions.

_x000D_
_x000D_
``````let array = ["ab", "abcdefgh", "abcd"];

array.sort((a, b) => b.length - a.length);

console.log(JSON.stringify(array, null, '\t'));``````
_x000D_
_x000D_
_x000D_

Here is the sort, depending on the length of a string with javascript as you asked:

[the solution of the problem by bubble sort][1]

[1]: http://jsfiddle.net/sssonline2/vcme3/2/`enter code here`

Based on Salman's answer, I've written a small function to encapsulate it:

``````function sortArrayByLength(arr, ascYN) {
arr.sort(function (a, b) {           // sort array by length of text
if (ascYN) return a.length - b.length;              // ASC -> a - b
else return b.length - a.length;                    // DESC -> b - a
});
}
``````

then just call it with

``````sortArrayByLength( myArray, true );
``````

Note that unfortunately, functions can/should not be added to the Array prototype, as explained on this page.

Also, it modified the array passed as a parameter and doesn't return anything. This would force the duplication of the array and wouldn't be great for large arrays. If someone has a better idea, please do comment!

``````#created a sorting function to sort by length of elements of list
def sort_len(a):
num = len(a)
d = {}
i = 0
while i<num:
d[i] = len(a[i])
i += 1
b = list(d.values())
b.sort()
c = []
for i in b:
for j in range(num):
if j in list(d.keys()):
if d[j] == i:
c.append(a[j])
d.pop(j)
return c
``````

`.sort(function(arg1, arg2) { return arg1.length - arg2.length })`

This code should do the trick:

``````var array = ["ab", "abcdefgh", "abcd"];

array.sort(function(a, b){return b.length - a.length});

console.log(JSON.stringify(array, null, '\t'));
``````

``````<script>
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "sdfds"
arr.sort(function(a,b){
return a.length<b.length
})
document.write(arr)

</script>
``````

The anonymous function that you pass to sort tells it how to sort the given array.hope this helps.I know this is confusing but you can tell the sort function how to sort the elements of the array by passing it a function as a parameter telling it what to do