JavaScript에서 이름(알파벳 순으로 배열 정렬)
JavaScript를 사용하여 이름별로 정렬해야 하는 배열(배열 내의 하나의 개체에 대해서는 아래 참조)이 있습니다.어떻게 해야 하죠?
var user = {
bio: null,
email: "user@domain.example",
firstname: "Anna",
id: 318,
lastAvatar: null,
lastMessage: null,
lastname: "Nickson",
nickname: "anny"
};
ES6로 가능한 최단 코드!
users.sort((a, b) => a.firstname.localeCompare(b.firstname))
String.protype.locale Compare() 기본 지원은 유니버설입니다!
어레이가 있다고 가정합니다.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;
})
이 코드는 어떤 타입에서도 사용할 수 있습니다.
"real life"™에서는 문자열을 비교할 때 대소문자를 무시하고, 발음을 올바르게 정렬하고, ,과 같은 이상한 기호를 사용하고 싶어하므로, 사용하기를 원할 수 있습니다.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)
});
비교된 문자열에 Unicode 문자가 포함되어 있는 경우 다음 함수를 사용할 수 있습니다.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);
local Compare를 사용할 수 있지만 falsey 값이 없는지 키도 확인해야 합니다.
다음 코드는 하나의 엔트리에 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()})
이름을 정렬하거나 charact 또는 special ((스페인어에서는 보통)와 같은 특수문자를 사용하는 경우 params locales(이 경우 스페인어에서는 es)와 다음과 같은 옵션을 사용할 수 있습니다.
let user = [{'firstname': 'Az'},{'firstname': 'Áb'},{'firstname':'ay'},{'firstname': 'Ña'},{'firstname': 'Nz'},{'firstname': 'ny'}];
user.sort((a, b) => a.firstname.localeCompare(b.firstname, 'es', {sensitivity: 'base'}))
console.log(user)
official local 옵션은 여기서 es(스페인어), de(독일어), fr(프랑스어)로 확인할 수 있습니다.감도 기준 평균에 대하여:
기본 문자가 다른 문자열만 동등하지 않은 것으로 비교됩니다.예: a µ b, a = ah, a = A.
보다 간결한 표기법:
user.sort(function(a, b){
return a.firstname === b.firstname ? 0 : a.firstname < b.firstname ? -1 : 1;
})
아무도 콜레이터에 대해 언급하지 않았다니 놀랍군요. 하면 안 요.localeCompare
가 하게 저하되어 있기 에, 할가 없는 한.
const collator = new Intl.Collator('zh-CN'); // Chinese Simplified for example
function sortAsc(a, b) {
if (typeof a === 'string' && typeof b === 'string') {
return collator.compare(b, a)
}
return b - a;
}
function sortDesc(a, b) {
if (typeof a === 'string' && typeof b === 'string') {
return collator.compare(a, b);
}
return a - b;
}
기본적으로 배열은 방식 정렬로 정렬할 수 있지만 객체를 정렬하려면 배열 정렬 방식으로 함수를 전달해야 합니다. 따라서 어레이를 사용하는 예를 제시하겠습니다.
user = [
{
bio: "<null>",
email: "user@domain.example",
firstname: "Anna",
id: 318,
last_avatar: "<null>",
last_message: "<null>",
lastname: "Nickson",
nickname: "anny",
},
{
bio: "<null>",
email: "user@domain.example",
firstname: "Senad",
id: 318,
last_avatar: "<null>",
last_message: "<null>",
lastname: "Nickson",
nickname: "anny",
},
{
bio: "<null>",
email: "user@domain.example",
firstname: "Muhamed",
id: 318,
last_avatar: "<null>",
last_message: "<null>",
lastname: "Nickson",
nickname: "anny",
},
];
var ar = user.sort(function (a, b) {
var nA = a.firstname.toLowerCase();
var nB = b.firstname.toLowerCase();
if (nA < nB) return -1;
else if (nA > nB) return 1;
return 0;
});
해라
users.sort((a,b)=> (a.firstname>b.firstname)*2-1)
var users = [
{ firstname: "Kate", id: 318, /*...*/ },
{ firstname: "Anna", id: 319, /*...*/ },
{ firstname: "Cristine", id: 317, /*...*/ },
]
console.log(users.sort((a,b)=> (a.firstname>b.firstname)*2-1) );
이 답변에서 영감을 얻어
users.sort((a,b) => (a.firstname - b.firstname));
또한 asec 및 desc sort 모두에 대해 다음을 사용할 수 있습니다.필요한 오름차순 정렬 또는 내림차순 정렬을 지정하는 변수 SortType이 있다고 가정합니다.
users.sort(function(a,b){
return sortType==="asc"? a.firstName.localeCompare( b.firstName): -( a.firstName.localeCompare( b.firstName));
})
일반화된 함수는 다음과 같이 쓸 수 있습니다.
function getSortedData(data, prop, isAsc) {
return data.sort((a, b) => (a[prop] < b[prop] ? -1 : 1) * (isAsc ? 1 : -1));
}
아래 매개 변수를 전달할 수 있습니다.
- 정렬할 데이터
- 데이터 속성을 기준으로 정렬해야 합니다.
- 마지막 파라미터는 부울타입입니다.오름차순으로 정렬할지 내림차순으로 정렬할지 확인합니다.
간단히 말하면 이 방법을 사용할 수 있다
users.sort(function(a,b){return a.firstname < b.firstname ? -1 : 1});
오브젝트에 사용할 수 있습니다.
transform(array: any[], field: string): any[] {
return array.sort((a, b) => a[field].toLowerCase() !== b[field].toLowerCase() ? a[field].toLowerCase() < b[field].toLowerCase() ? -1 : 1 : 0);}
레코드에 대해서만 이름 있는 정렬 함수를 사용하는 경우 구문은 다음과 같습니다.
let sortFunction = (a, b) => {
if(a.firstname < b.firstname) { return -1; }
if(a.firstname > b.firstname) { return 1; }
return 0;
})
users.sort(sortFunction)
다음 기능은 작동하지 않습니다.
users.sort(sortFunction(a,b))
톱 답안을 키별로 정렬하기 위해 프로토타입에 밀어넣었다.
Array.prototype.alphaSortByKey= function (key) {
this.sort(function (a, b) {
if (a[key] < b[key])
return -1;
if (a[key] > b[key])
return 1;
return 0;
});
return this;
};
인 '내부 배열 방식'을 사용할 수 .sort
// custom sort function to be passed as param/callback to the Array's sort method
function myCustomSort(a, b) {
return (a.toLowerCase() > b.toLowerCase()) ? 1 : -1;
}
// Actual method to be called by entity that needs sorting feature
function sortStrings() {
var op = Array.prototype.sort.call(arguments, myCustomSort);
}
// Testing the implementation
var sortedArray = sortStrings("Burger", "Mayo1", "Pizza", "boxes", "Apples", "Mayo");
console.log(sortedArray); //["Apples", "boxes", "Burger", "Mayo", "Mayo1", "Pizza"]
이 코드를 이해하기 위한 주의사항.
- 방식은 " " " 입니다.
myCustomSort
는 (입력 배열에서) 각 요소 쌍의 비교에 대해 +1 또는 -1을 반환합니다. toLowerCase()
/toUpperCase()
대소문자의 차이가 정렬 프로세스의 정확성에 영향을 주지 않도록 커스텀 정렬 콜백 방식에서 사용합니다.
나는 이 설명이 충분히 명확하기를 바란다.만약 당신이 더 많은 정보가 필요하다고 생각한다면 자유롭게 코멘트를 해 주세요.
건배!
두 요인 정렬(이름과 성)의 경우:
users.sort((a, b) => a.name.toLowerCase() < b.name.toLowerCase() ? -1 : a.name.toLowerCase() > b.name.toLowerCase() ? 1 : a.lastname.toLowerCase() < b.lastname.toLowerCase() ? -1 : a.lastname.toLowerCase() > b.lastname.toLowerCase() ? 1 : 0)
대소문자를 구분하기 위해 비슷한 것을 사용할 수 있습니다.
users.sort(function(a, b){
//compare two values
if(a.firstname.toLowerCase() < b.firstname.toLowerCase()) return -1;
if(a.firstname.toLowerCase() > b.firstname.toLowerCase()) return 1;
return 0;
})
구현은 이전 ES 버전에서 잘 작동합니다.
sortObject = function(data) {
var keys = Object.keys(data);
var result = {};
keys.sort();
for(var i = 0; i < keys.length; i++) {
var key = keys[i];
result[key] = data[key];
}
return result;
};
언급URL : https://stackoverflow.com/questions/6712034/sort-array-by-firstname-alphabetically-in-javascript
'IT' 카테고리의 다른 글
Maria에서 JSON_QUERY를 사용하여 개체 JSON 어레이를 가져오는 중DB (0) | 2023.01.21 |
---|---|
PHP가 특정 문자열 앞에 있는 모든 문자를 제거합니다. (0) | 2023.01.21 |
UTC Epoch를 로컬 날짜로 변환 (0) | 2023.01.21 |
MySQL Get Quarter(QTD) 1, 2, 3, 4 (금년도) (0) | 2023.01.21 |
Windows에서 MySQL 또는 MariaDB 서버를 실행하기 위한 최소 파일 - (Portable MySQL/MariaDB) (0) | 2023.01.21 |