Подтвердить что ты не робот

Как отсортировать массив по длине каждого элемента?

У меня есть такой массив:

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

После сортировки выходной массив должен быть:

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

Я имею в виду, я хочу в порядке убывания длины каждого элемента.

4b9b3361

Ответ 1

Вы можете использовать метод Array.sort для сортировки массива. Функция сортировки, которая рассматривает длину строки в качестве критерия сортировки, может использоваться следующим образом:

arr.sort(function(a, b){
  // ASC  -> a.length - b.length
  // DESC -> b.length - a.length
  return b.length - a.length;
});

Примечание: сортировка ["a", "b", "c"] по длине строки не гарантирует возврата ["a", "b", "c"]. Согласно спецификациям:

Сортировка не обязательно стабильна (то есть элементы, которые сравнивают равные не обязательно остаются в своем первоначальном порядке).

Если целью является сортировка по длине, то по порядку словаря необходимо указать дополнительные критерии:

["c", "a", "b"].sort(function(a, b) {
  return a.length - b.length || // sort by length, if equal then
         a.localeCompare(b);    // sort by dictionary order
});

Ответ 2

Вот сортировка, в зависимости от длины строки с javascript, как вы просили:

[решение проблемы методом пузырьковой сортировки] [1]

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

Ответ 3

Мы можем использовать метод Array.sort для сортировки этого массива.

Решение ES5

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

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

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

Ответ 4

Основываясь на ответе Салмана, я написал небольшую функцию для его инкапсуляции:

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

то просто назовите его

sortArrayByLength( myArray, true );

Обратите внимание, что, к сожалению, функции нельзя добавлять в прототип Array, как описано на этой странице.

Кроме того, он изменил массив, переданный как параметр, и ничего не возвращает. Это приведет к дублированию массива и не будет большим для больших массивов. Если у кого-то есть лучшая идея, сделайте комментарий!

Ответ 5

Я адаптировал ответ @shareef, чтобы сделать его кратким. Я использую

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

Ответ 6

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

Анонимная функция, которую вы передаете сортировке, сообщает ей, как сортировать заданный массив. Надеюсь, что это поможет. Я знаю, что это запутанно, но вы можете сказать функции сортировки, как сортировать элементы массива, передавая ему функцию как параметр, указывающий, что делать