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



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



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


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



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


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

667   6  

6 ответов:

можно использовать 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
});

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

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

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

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

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

обратите внимание, что, к сожалению, функции не могут / не должны быть добавлены в прототип массива, как описано на на этой странице.

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

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

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

можно использовать массив.сортировка способ сортировки этого массива.

решение ES5

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

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

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

на по возрастанию порядок сортировки: a.length - b.length

на спуск порядок сортировки: b.length - a.length

решение ES6

внимание: не все браузеры могут понять код ES6!

в ES6 мы можем использовать выражения функции стрелка.

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

array.sort((a, b) => 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>

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

Comments

    Ничего не найдено.