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