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

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

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


답변

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


답변

요청한대로 javascript가있는 문자열의 길이에 따라 정렬은 다음과 같습니다.

[버블 정렬에 의한 문제 해결] [1]

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


답변

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

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


답변

@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


답변

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

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

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

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