2017-04-13 9 views
1

표시하기 전에 정렬해야하는 Json 데이터가 있습니다. 내 Json은 아래와 같습니다. ColumnLocation을 기준으로 정렬해야합니다. 정렬 된 배열 즉 필드를 기반으로 Json 데이터 정렬

[{ 
    "Name": "PieChart", 
    "Id": "1", 
    "ColumnLocation": "0", 
    "RowLocation": "0" 
}, { 
    "Name": "Calendar", 
    "Id": "2", 
    "ColumnLocation": "1", 
    "RowLocation": "0" 
}, { 
    "Name": "FavouriteFilter", 
    "Id": "3", 
    "ColumnLocation": "2", 
    "RowLocation": "0" 
}, { 
    "Name": "FilterResults", 
    "Id": "4", 
    "ColumnLocation": "0", 
    "RowLocation": "1" 
}, { 
    "Name": "Watched", 
    "Id": "5", 
    "ColumnLocation": "1", 
    "RowLocation": "1" 
}] 

패션을

col : 0, row 0 
col : 0, row 1 
col : 1, row 0 
col : 1, row 1 
+0

json이 보이지 않고 '다음과 같은 항목'만 표시됩니다. 그러나 JSON에서 JS 객체/배열로 변환하거나 (JSON이 무엇으로 변환되는지에 따라) 정렬을 실행하고 거기에 접근 할 수 있습니다. JSON은 변환해야하는 일반적인 정렬 알고리즘을 적용하기위한 문자열입니다 (JSON.parse). –

+0

@TimConsolazio 죄송합니다. Json을 추가했습니다. – indra257

+0

아래에 답변을 게시하십시오. –

답변

1

lodash/밑줄 필요 없음 다음의 항목이 있어야합니다. 당신의 값이 문자열이기 때문에, 먼저 숫자로 구문 분석하고 비교해야 :

let a = [{"Name":"PieChart","Id":"1","ColumnLocation":"0","RowLocation":"0"},{"Name":"Calendar","Id":"2","ColumnLocation":"1","RowLocation":"0"},{"Name":"FavouriteFilter","Id":"3","ColumnLocation":"2","RowLocation":"0"},{"Name":"FilterResults","Id":"4","ColumnLocation":"0","RowLocation":"1"},{"Name":"Watched","Id":"5","ColumnLocation":"1","RowLocation":"1"}] 
 

 
let sorted = a.sort((a, b) => parseInt(a.ColumnLocation) - parseInt(b.ColumnLocation)); 
 

 
console.log(sorted);

+0

사실, 이것은 더 잘 설계된 비교 함수 (숫자 데이터 유형을 반환하는 빼기) (+1)입니다. – trincot

0

짧고 달콤한 당신은 Array.prototype.sort를 사용할 수 있습니다.

let arr = [{"Name":"PieChart","Id":"1","ColumnLocation":"0","RowLocation":"0"},{"Name":"Calendar","Id":"2","ColumnLocation":"1","RowLocation":"0"},{"Name":"FavouriteFilter","Id":"3","ColumnLocation":"2","RowLocation":"0"},{"Name":"FilterResults","Id":"4","ColumnLocation":"0","RowLocation":"1"},{"Name":"Watched","Id":"5","ColumnLocation":"1","RowLocation":"1"}] 

arr.sort ((a, b) => { return parseInt (a.ColumnLocation) > parseInt (b.ColumnLocation) }); 

console.log (arr); 

숫자로 변환하지 않으면 정렬이 예상 한 것과 다를 수 있습니다.

+0

이 정렬은 불안정 할 수 있습니다. 'sort'에 제공하는 비교 함수는 음수, 0 또는 양수가 될 수있는 숫자를 반환해야하지만이 함수는 부울을 반환하므로 음수 값을 반환하지 않습니다. – trincot

+0

프리미티브 값이 같을 때 구별 할 수 없기 때문에 프리미티브 값에는 문제가 없습니다. 그러나 일반적으로 허용 된 답처럼 빼기를하는 것이 더 좋습니다. 안정된 정렬로 이어질 수 있습니다 ("안정"은 정렬 조건과 동일한 값을 구별 할 수있는 경우에만 의미가 있지만, 구별). 그것은 최선의 관행의 문제입니다. – trincot

+0

그래서이 용도에서는 정렬에 문제가 없습니다. 고맙습니다. –