각 요소의 길이를 기준으로 배열을 정렬하는 방법은 무엇입니까?


95

다음과 같은 배열이 있습니다.

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

정렬 후 출력 배열은 다음과 같아야합니다.

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

내 말은, 나는 각 요소의 길이의 내림차순으로 원합니다.


1
sort매우 간단합니다. 어디에서 어려움이 있습니까?
mu가 너무 짧습니다.

4
@muistooshort 아니라 그는 :) 선택한 대답에서 알 수있는 바와 같이 정렬에서 String.length를 찾고 있었다, alphabeticly 문자열을 정렬) 종류 (기본
jave.web

답변:


231

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
});

항목의 길이를 줄여 배열을 정렬한다고 추가합니다.
davidhq

아하는 코멘트에서 :) 처음에는 보지 않았다 것
davidhq

정보를 추가하기 위해. 이 스 니펫은 모든 경우에 작동하지 않습니다.
Arunkumar Srisailapathi

arr = [ 'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h', 'i', 'k', 'l'], 그것은 실패합니다
Arunkumar Srisailapathi에게

15
ES6 방법arr.sort((a, b) => b.length - a.length)
Fergal

4

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'));

대한 오름차순으로 정렬 순서 :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'));



0

Salman의 대답에 따라 캡슐화하는 작은 함수를 작성했습니다.

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 프로토 타입에 추가 할 수 있거나 추가해서는 안됩니다 .

또한 매개 변수로 전달 된 배열을 수정했으며 아무것도 반환하지 않습니다. 이것은 어레이의 중복을 강요하고 큰 어레이에는 적합하지 않습니다. 누군가가 더 나은 아이디어를 가지고 있다면 댓글을 달아주세요!


0

@shareef의 답변을 간결하게 수정했습니다. 나는 사용한다,

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


이것은 낮은 길이에서 높은 길이로 정렬됩니다
Miguel

0
#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

1
코드를 게시하는 것만으로는 도움이되지 않습니다. 코드가 수행하는 작업에 대한 간략한 설명을 제공하십시오.
coderpc

-1

이 코드는 트릭을 수행해야합니다.

var array = ["ab", "abcdefgh", "abcd"];

array.sort(function(a, b){return b.length - a.length});

console.log(JSON.stringify(array, null, '\t'));

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

정렬을 위해 전달하는 익명 함수는 주어진 배열을 정렬하는 방법을 알려줍니다.이게 도움이 되길 바랍니다. 혼란 스럽지만 정렬 함수에 매개 변수로 함수를 전달하여 배열의 요소를 정렬하는 방법을 알려줄 수 있습니다. 해야 할 일


5
반환해야하는 정렬 비교 함수는 무엇입니까? 여기에 힌트가 있습니다 : 부울이 아닙니다.
mu가 너무 짧습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.