У мене такий масив:
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"
Після сортування вихідним масивом має бути:
arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"
Я маю на увазі, я хочу в порядку зменшення довжини кожного елемента.
У мене такий масив:
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"
Після сортування вихідним масивом має бути:
arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"
Я маю на увазі, я хочу в порядку зменшення довжини кожного елемента.
Відповіді:
Ви можете використовувати 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
});
arr.sort((a, b) => b.length - a.length)
Для сортування цього масиву ми можемо використовувати метод Array.sort .
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 ми можемо використовувати вирази функції стрілки .
let array = ["ab", "abcdefgh", "abcd"];
array.sort((a, b) => b.length - a.length);
console.log(JSON.stringify(array, null, '\t'));
Ось сортування, залежно від довжини рядка з 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 })
#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
<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>
Анонімна функція, яку ви передаєте для сортування, повідомляє, як сортувати даний масив. Сподіваюся, це допомагає. Я знаю, що це бентежить, але ви можете сказати функції сортування, як сортувати елементи масиву, передаючи їй функцію як параметр, що повідомляє це що робити
sortдосить прямо вперед, де у вас виникають труднощі?