답변:
배열이 있다고 가정합니다 users
. users.sort
두 개의 인수를 사용하여 비교하는 함수를 사용 하고 전달할 수 있습니다 (비교기)
돌아와야한다
우리의 경우 두 요소가 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
. 명확성을 위해 다른 답변을 참조하십시오.
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)
});
'a'>'A' //true
'z'>'a' //true
'A'>'z' //false
'Zebra'
보다 문자열을 더 높은 정렬하는지 여부를 아는 것이 중요 'apple'
합니다 .toLowerCase()
.
'Z' < 'a' // true
와'z' < 'a' // false
비교 된 문자열에 유니 코드 문자가 포함되어 있으면 다음과 같은 클래스 localeCompare
기능 을 사용할 수 있습니다 String
.
users.sort(function(a,b){
return a.firstname.localeCompare(b.firstname);
})
users.sort((a, b) => a.name.localeCompare(b.name))
멋진 작은 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')
underscorejs 는 매우 멋진 _.sortBy 함수를 제공합니다.
_.sortBy([{a:1},{a:3},{a:2}], "a")
또는 사용자 정의 정렬 기능을 사용할 수 있습니다.
_.sortBy([{a:"b"},{a:"c"},{a:"a"}], function(i) {return i.a.toLowerCase()})
sortBy
반환 값이 문자열 때문에 알파벳 순으로 정렬이 수행 감지? 감사합니다
ñ 또는 áéíóú (스페인어 공용어) 와 같은 특수 문자로 이름이나 무언가를 정렬 하는 경우 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)
oficial 로케일 옵션은 iana , es (스페인어), de (독일어), fr (프랑스어) 에서 찾을 수 있습니다 . 약 감도 기본 수단 :
기본 문자가 다른 문자열 만 다른 것으로 비교합니다. 예 : a ≠ b, a = á, a = A
기본적으로 메소드 정렬을 사용하여 배열을 정렬 할 수 있지만 객체를 정렬하려면 배열의 메소드를 정렬하는 함수를 전달해야하므로 배열을 사용하는 예제를 제공합니다.
user = [{
bio: "<null>",
email: "user@domain.com",
firstname: 'Anna',
id: 318,
"last_avatar": "<null>",
"last_message": "<null>",
lastname: 'Nickson',
nickname: 'anny'
},
{
bio: "<null>",
email: "user@domain.com",
firstname: 'Senad',
id: 318,
"last_avatar": "<null>",
"last_message": "<null>",
lastname: 'Nickson',
nickname: 'anny'
},
{
bio: "<null>",
email: "user@domain.com",
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;
});
else
제거 하지 않아야 합니까? 그렇지 않으면 return 0
읽을 수 없습니다
이 답변 에서 영감을 얻은
users.sort((a,b) => (a.firstname - b.firstname));
또한 asec 및 desc 정렬 모두에 대해 다음을 사용할 수 있습니다. 원하는 오름차순 정렬 또는 내림차순 정렬을 지정 하는 변수 SortType 이 있다고 가정하십시오 .
users.sort(function(a,b){
return sortType==="asc"? a.firstName.localeCompare( b.firstName): -( a.firstName.localeCompare( b.firstName));
})
[9,8,7,6,5,1,2,3].sort((a,b) => a<b ? -1 : 1)
내장 배열 방법-을 사용할 수 있습니다 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(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;
})
레코드에 대해서만 명명 된 정렬 함수를 사용하려는 경우 구문은 다음과 같습니다.
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))