2012-05-17 36 views
54

Tôi có một mảng như thế này:Sắp xếp một mảng dựa vào độ dài của mỗi phần tử

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

Sau khi phân loại, mảng đầu ra nên là:

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

Ý tôi là, tôi muốn trong thứ tự giảm dần của độ dài của mỗi phần tử.

+0

[ 'sort'] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort) là khá thẳng về phía trước, có thì bạn gặp khó khăn? –

+1

@muistooshort cũng sắp xếp mặc định() sắp xếp các chuỗi chữ cái, anh ấy đang tìm kiếm phân loại string.length như có thể thấy trong câu trả lời đã chọn :) –

Trả lời

136

Bạn có thể sử dụng phương pháp Array.sort để sắp xếp mảng. Một chức năng phân loại mà coi chiều dài của chuỗi như các tiêu chí phân loại 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"] bởi chiều dài của chuỗi không được bảo đảm để trở ["a", "b", "c"]. Theo the specs:

Các loại không nhất thiết phải ổn định (có nghĩa là, các yếu tố mà so sánh bình đẳng không nhất thiết duy trì trật tự ban đầu của họ).

Nếu mục tiêu là để sắp xếp theo chiều dài sau đó theo lệnh từ điển mà bạn phải xác đị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 
}); 
+6

Tuyệt vời! Ngọt! Vâng! – Squirrl

+0

Tôi sẽ thêm rằng điều này sắp xếp mảng bằng cách giảm độ dài của các mục. – davidhq

+0

aha trong nhận xét :) đã không nhìn thấy nó lúc đầu tiên – davidhq

2

Dưới đây là các loại, tùy thuộc vào độ dài của một chuỗi với javascript như bạn hỏi:

[các giải pháp của vấn đề bằng bong bóng sắp xếp] [1]

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

-2
<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> 

Chức năng vô danh mà bạn vượt qua để sắp xếp cho nó làm thế nào để sắp xếp các array.hope cho helps.I này biết đây là khó hiểu nhưng bạn có thể nói với các chức năng sắp xếp như thế nào để sắp xếp các phần tử của mảng bằng cách đi qua nó một chức năng như một tham số nói nó phải làm gì

+3

Chức năng so sánh sắp xếp cần trả về là gì? Đây là một gợi ý: nó không phải là một boolean. –

0

Dựa trên câu trả lời của Salman, tôi đã viết một hàm nhỏ để đóng gói 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 không may, các chức năng có thể/không nên được thêm vào nguyên mẫu Array, như được giải thích trên this page.

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 nhân bản của mảng và sẽ không được tuyệt vời cho mảng lớn. Nếu ai đó có một ý tưởng tốt hơn, xin vui lòng bình luận!

0

Tôi đã thích nghi câu trả lời của @ shareef để làm cho câu trả lời ngắn gọn. Tôi sử dụng,

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

+0

điều này sẽ sắp xếp từ độ dài thấp đến độ dài cao hơn – Miguel

Các vấn đề liên quan