[javascript] Javascript에서 이름을 알파벳순으로 배열 정렬

JavaScript를 사용하여 이름별로 정렬 해야하는 배열 (배열의 한 객체에 대해서는 아래 참조)이 있습니다. 어떻게하니?

var user = {
   bio: null,
   email:  "user@domain.com",
   firstname: "Anna",
   id: 318,
   lastAvatar: null,
   lastMessage: null,
   lastname: "Nickson",
   nickname: "anny"
};



답변

배열이 있다고 가정합니다 users. users.sort두 개의 인수를 사용하여 비교하는 함수를 사용 하고 전달할 수 있습니다 (비교기)

돌아와야한다

  • 첫 번째 인수가 두 번째보다 작은 경우 음의 값 (결과 배열에서 두 번째 앞에 배치해야 함)
  • 첫 번째 인수가 클 경우 긍정적 인 것 (두 번째 인수 뒤에 놓아야 함)
  • 이 두 요소가 같으면 0입니다.

우리의 경우 두 요소가 a있고 b비교 a.firstname하고 싶습니다.b.firstname

예:

users.sort(function(a, b){
    if(a.firstname < b.firstname) { return -1; }
    if(a.firstname > b.firstname) { return 1; }
    return 0;
})

이 코드는 모든 유형에서 작동합니다.

“실제”™에서는 문자열을 비교할 때 대소 문자를 무시하고 분음 부호, ß와 같은 이상한 기호 등을 올바르게 정렬하기를 원하므로을 사용할 수 있습니다 localeCompare. 명확성을 위해 다른 답변을 참조하십시오.


답변

ES6으로 가능한 가장 짧은 코드!

users.sort((a, b) => a.firstname.localeCompare(b.firstname))

String.prototype.localeCompare () 기본 지원은 보편적입니다!


답변

이 같은:

array.sort(function(a, b){
 var nameA=a.name.toLowerCase(), nameB=b.name.toLowerCase();
 if (nameA < nameB) //sort string ascending
  return -1;
 if (nameA > nameB)
  return 1;
 return 0; //default return value (no sorting)
});


답변

비교 된 문자열에 유니 코드 문자가 포함되어 있으면 다음과 같은 클래스 localeCompare기능 을 사용할 수 있습니다 String.

users.sort(function(a,b){
    return a.firstname.localeCompare(b.firstname);
})


답변

멋진 작은 ES6 하나의 라이너 :

users.sort((a, b) => a.firstname !== b.firstname ? a.firstname < b.firstname ? -1 : 1 : 0);


답변

localeCompare를 사용할 수 있지만 잘못된 값도 키를 확인해야합니다.

하나의 항목에 lname이 없으면 아래 코드가 작동하지 않습니다.

obj.sort((a, b) => a.lname.localeCompare(b.lname))

따라서 아래와 같이 잘못된 값을 확인해야합니다

let obj=[
{name:'john',lname:'doe',address:'Alaska'},
{name:'tom',lname:'hopes',address:'California'},
{name:'harry',address:'Texas'}
]
let field='lname';
console.log(obj.sort((a, b) => (a[field] || "").toString().localeCompare((b[field] || "").toString())));

또는

우리는 매우 간단한 lodash를 사용할 수 있습니다. 반환 된 값, 즉 숫자 또는 문자열을 감지하고 그에 따라 정렬합니다.

import sortBy from 'lodash/sortBy';
sortBy(obj,'name')

https://lodash.com/docs/4.17.5#sortBy


답변

underscorejs 는 매우 멋진 _.sortBy 함수를 제공합니다.

_.sortBy([{a:1},{a:3},{a:2}], "a")

또는 사용자 정의 정렬 기능을 사용할 수 있습니다.

_.sortBy([{a:"b"},{a:"c"},{a:"a"}], function(i) {return i.a.toLowerCase()})