Lodash를 사용하여 값별로 개체 배열 정렬


97

Lodash를 사용하여 '이름'값으로 배열을 정렬하려고합니다. Lodash 문서를 사용하여 아래 솔루션을 만들었지 만 .orderBy는 전혀 영향을 미치지 않는 것 같습니다. 누구든지 배열을 정렬하는 올바른 방법에 대해 밝힐 수 있습니까?

문자 배열

[  
   {  
      "id":25,
      "name":"Anakin Skywalker",
      "createdAt":"2017-04-12T12:48:55.000Z",
      "updatedAt":"2017-04-12T12:48:55.000Z"
   },
   {  
      "id":1,
      "name":"Luke Skywalker",
      "createdAt":"2017-04-12T11:25:03.000Z",
      "updatedAt":"2017-04-12T11:25:03.000Z"
   }
]

기능 코드

 var chars = this.state.characters;

 _.orderBy(chars, 'name', 'asc'); // Use Lodash to sort array by 'name'

 this.setState({characters: chars})

답변:


191

이 메서드 orderBy는 입력 배열을 변경하지 않으므로 결과를 배열에 할당해야합니다.

var chars = this.state.characters;

chars = _.orderBy(chars, ['name'],['asc']); // Use Lodash to sort array by 'name'

 this.setState({characters: chars})

흠, 여전히 배열을 정렬하지 않는 것 같습니다. 확실하지 나는 새 질문을 업데이트하거나해야하는 경우

1
대답은 업데이트, 어쩌면 당신의 오류는 대한 배열 대신 두 개의 매개 변수를 전달하는 것입니다'name', 'asc'
아르테미스 젊은

1
" orderBy입력 배열을 변경하지 않습니다."... " orderBy배열을 제자리에서 변경합니다." 의도 된 표현은 아마도 "not-in-place"또는 "out-of-place"일 것입니다. 참조 : en.wikipedia.org/wiki/In-place_algorithm
Dem Pilafian

이 대답에 아무것도 추가하지 않기 때문에 실제로 당신이 바로, 난 그냥이 문장을 제거하고
아르테미스 젊은

즉, 두 번째 파라미터는 ['asc']상기의 방법에 추가하는 것이하지 않도록 오름차순 달성 않는 reverse()애프터 orderBy(버젼 4.17.15 적어도)
디 오티

60

lodash sortBy ( https://lodash.com/docs/4.17.4#sortBy )를 사용할 수 있습니다 .

코드는 다음과 같을 수 있습니다.

const myArray = [  
   {  
      "id":25,
      "name":"Anakin Skywalker",
      "createdAt":"2017-04-12T12:48:55.000Z",
      "updatedAt":"2017-04-12T12:48:55.000Z"
   },
   {  
      "id":1,
      "name":"Luke Skywalker",
      "createdAt":"2017-04-12T11:25:03.000Z",
      "updatedAt":"2017-04-12T11:25:03.000Z"
   }
]

const myOrderedArray = _.sortBy(myArray, o => o.name)

32
속기를 사용할 수도 있습니다._.sortBy(myArray, 'name')
Don

7
에 비해 orderBy에서는 정렬 유형을 전달할 수 없으며 sortBy항상 오름차순으로 정렬됩니다.
a_rahmanshah
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.