Tôi có một mảng như thế này:
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"
Sau khi sắp xếp, mảng đầu ra sẽ là:
arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"
Ý tôi là, tôi muốn theo thứ tự giảm dần độ dài của mỗi phần tử.
Tôi có một mảng như thế này:
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"
Sau khi sắp xếp, mảng đầu ra sẽ là:
arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"
Ý tôi là, tôi muốn theo thứ tự giảm dần độ dài của mỗi phần tử.
Câu trả lời:
Bạn có thể sử dụng Array.sort
phương pháp để sắp xếp mảng. Một hàm sắp xếp coi độ dài của chuỗi làm tiêu chí sắp xếp có thể được sử dụng như sau:
arr.sort(function(a, b){
// ASC -> a.length - b.length
// DESC -> b.length - a.length
return b.length - a.length;
});
Lưu ý: sắp xếp ["a", "b", "c"]
theo độ dài của chuỗi không được đảm bảo trả về ["a", "b", "c"]
. Theo thông số kỹ thuật :
Việc sắp xếp không nhất thiết phải ổn định (nghĩa là, các phần tử so sánh bằng nhau không nhất thiết phải giữ nguyên thứ tự ban đầu của chúng).
Nếu mục tiêu là sắp xếp theo độ dài thì theo thứ tự từ điển, bạn phải chỉ định tiêu chí bổ sung:
["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)
Chúng ta có thể sử dụng phương thức Array.sort để sắp xếp mảng này.
var array = ["ab", "abcdefgh", "abcd"];
array.sort(function(a, b){return b.length - a.length});
console.log(JSON.stringify(array, null, '\t'));
Đối với thứ tự sắp xếp tăng dần :
a.length - b.length
Đối với thứ tự sắp xếp giảm dần :
b.length - a.length
Chú ý: không phải trình duyệt nào cũng có thể hiểu được mã ES6!
Trong ES6, chúng ta có thể sử dụng biểu thức hàm mũi tên .
let array = ["ab", "abcdefgh", "abcd"];
array.sort((a, b) => b.length - a.length);
console.log(JSON.stringify(array, null, '\t'));
Đây là cách sắp xếp, tùy thuộc vào độ dài của một chuỗi với javascript như bạn đã hỏi:
[giải pháp của vấn đề bằng cách sắp xếp bong bóng] [1]
[1]: http://jsfiddle.net/sssonline2/vcme3/2/enter code here
Dựa trên câu trả lời của Salman, tôi đã viết một hàm nhỏ để gói gọn nó:
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
});
}
sau đó chỉ cần gọi nó với
sortArrayByLength( myArray, true );
Lưu ý rằng rất tiếc, các hàm có thể / không nên được thêm vào nguyên mẫu Mảng, như được giải thích trên trang này .
Ngoài ra, nó đã sửa đổi mảng được truyền dưới dạng tham số và không trả về bất kỳ thứ gì. Điều này sẽ buộc phải sao chép mảng và sẽ không tốt cho các mảng lớn. Nếu ai đó có một ý tưởng tốt hơn, xin vui lòng bình luận!
Tôi đã điều chỉnh câu trả lời của @ shareef để làm cho nó ngắn gọn. Tôi sử dụng,
.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>
Hàm ẩn danh mà bạn truyền vào để sắp xếp sẽ cho nó biết cách sắp xếp mảng đã cho. Hãy gõ vào điều này. nó phải làm gì
sort
là khá thẳng về phía trước, bạn đang gặp khó khăn ở đâu?