Как отсортировать массив по длине каждого элемента?
У меня есть такой массив:
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"
После сортировки выходной массив должен быть:
arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"
Я имею в виду, я хочу в порядке убывания длины каждого элемента.
Ответы
Ответ 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>
Анонимная функция, которую вы передаете сортировке, сообщает ей, как сортировать заданный массив. Надеюсь, что это поможет. Я знаю, что это запутанно, но вы можете сказать функции сортировки, как сортировать элементы массива, передавая ему функцию как параметр, указывающий, что делать