ramesh kumar
ramesh kumar

Reputation: 1707

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 want in the descending order of the length of each element.

Upvotes: 143

Views: 175011

Answers (12)

Salman Arshad
Salman Arshad

Reputation: 272146

You can use Array.sort method to sort the array. The callback function should use the length of item as the sorting criteria:

// sort ascending - shorter items first
arr.sort((a, b) => a.length - b.length);

// sort descending - longer items first
arr.sort((a, b) => b.length - a.length);

You can specify additional criteria if length of two items are same:

// sort by length
// if equal then sort by dictionary order
["c", "a", "b"].sort((a, b) => a.length - b.length || a.localeCompare(b));

Upvotes: 318

shareef
shareef

Reputation: 9581

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

var arr = ['1234', '12', '12345', '1'];

bubbleSort(arr );

function bubbleSort(a) {
    var swapped;
    do {
        swapped = false;
        for (var i = 0; i < a.length - 1; i++) {
            if (a[i].length < a[i + 1].length) {
                var temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
                swapped = true;
            }
        }
    } while (swapped);
}

console.log(arr );

Upvotes: 3

Soumitya Chauhan
Soumitya Chauhan

Reputation: 367

let arr  = [5,2,100,1,20,3];
arr.sort((a,b)=>{
  return a-b 
})

console.log(arr) //[1, 2, 3, 5, 20, 100]

on the return value, the sort method will perform the functionality of swapping of an elements

return < 0  { i.e -ve number then  a comes before b}
return > 0  { i.e +ve number then  b comes before a}
return == 0 { order of a and b remains same }

Upvotes: 1

V. Sambor
V. Sambor

Reputation: 13389

With modern JavaScript you can do like this:

Descending order

const arr = [
  "ab",
  "abcdefgh",
  "abcd",
  "abcdefghijklm"
];

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

console.log(JSON.stringify(arr, null, 2));

Ascending Order - Just switch the a with b

const arr = [
  "ab",
  "abcdefgh",
  "abcd",
  "abcdefghijklm"
];

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

console.log(JSON.stringify(arr, null, 2));

Upvotes: 5

Force Bolt
Force Bolt

Reputation: 1221

let array = [`ab`, `abcdefgh`, `abcd`];
let newArray = array.sort((a,b) => {
    return b.length - a.length
})
console.log(newArray);

Please the following code

Upvotes: 0

User123456
User123456

Reputation: 2738

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;
}

Upvotes: 1

Rishabh Gupta
Rishabh Gupta

Reputation: 11

#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

Upvotes: 1

Hiền
Hiền

Reputation: 11

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'));

Upvotes: 0

Bharata
Bharata

Reputation: 14175

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

ES5 solution

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

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

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

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.

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

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

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

Upvotes: 13

user3054109
user3054109

Reputation:

I adapted @shareef's answer to make it concise. I use,

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

Upvotes: 0

Nico
Nico

Reputation: 4426

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!

Upvotes: 0

Mad Scientist
Mad Scientist

Reputation: 340

<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

Upvotes: -3

Related Questions