2014-04-09 4 views
0

다음은 배열 상태가 포함 된 json 데이터입니다. 배열의 크기는 항상 2이지만 배열 요소의 순서는 고정되어 있지 않습니다. 배열 요소 값은 null 일 수 있습니다. 샘플 데이터는 다음과 같습니다자바 스크립트에서 json 데이터 정렬

{ 
    "status": "SUCCESS", 
    "status_message": "Susscessfully queried details.", 
    "total_records": 2, 
    "m_details": 
    [ 
     { 
      "p_id": 1023, 
      "pname": "india", 
      "states": 
      [ 
       { 
        "state": "karnataka", 
        "capital": "bangalore" 
       }, 
       { 
        "state": null, 
        "capital": null, 
       } 
      ] 
     }, 
     { 
      "p_id": 1023, 
      "pname": "india", 
      "states": 
      [ 
       { 
        "state": null, 
        "capital": null 
       }, 
       { 
        "state": "Tamilnadu", 
        "capital": "chennai" 
       } 
      ] 
     } 
    ] 
} 

내 질문 :

  1. 몇 가지 기본 텍스트로 null 값을 변환하는 방법을 말을 "-".
  2. 어떻게 모든 상태를 오름차순 또는 내림차순으로 정렬 할 수 있습니까?
+1

http://jsfiddle.net/jfriend00/MTQ86/는 JSON 객체를 주문하는 방법을 볼 수 -attribute – TlonXP

+0

null 값을 텍스트로 변환하려면 for 루프를 작성하여 배열을 통과하고 for..in 루프를 작성하여 객체의 각 키를 처리해야합니다. 각 값 == null인지 확인하고 값을 원하는 문자열로 설정하십시오. –

+1

한 번 더 http://stackoverflow.com/questions/881510/jquery-sorting-json-by-properties – spiderman

답변

0

null 값을 "-"으로 전환하기 위해 데이터의 모든 요소를 ​​반복 할 수 있으며 이와 같은 콜백을 사용하는 반복기가 있습니다.

function iterateObject(item, callback) { 
    if (typeof item === "object" && item !== null) { 
     if (item instanceof Array) { 
      for (var i = 0; i < item.length; i++) { 
       item[i] = iterateObject(item[i], callback); 
      } 
     } else { 
      for (var prop in item) { 
       if (item.hasOwnProperty(prop)) { 
        item[prop] = iterateObject(item[prop], callback); 
       } 
      } 
     } 
    } else { 
     // call the callback on any item that is not an array or object 
     return callback(item); 
    } 
    return item; 
} 


var data = { 
    "status": "SUCCESS", 
    "status_message": "Susscessfully queried details.", 
    "total_records": 2, 
    "m_details": 
    [ 
     { 
      "p_id": 1023, 
      "pname": "india", 
      "states": 
      [ 
       { 
        "state": "karnataka", 
        "capital": "bangalore" 
       }, 
       { 
        "state": null, 
        "capital": null, 
       } 
      ] 
     }, 
     { 
      "p_id": 1023, 
      "pname": "india", 
      "states": 
      [ 
       { 
        "state": null, 
        "capital": null 
       }, 
       { 
        "state": "Tamilnadu", 
        "capital": "chennai" 
       } 
      ] 
     } 
    ] 
}; 

// iterate through the object and convert all `null` values to `"-"` 
iterateObject(data, function(item) { 
    return (item === null) ? "-" : item; 
}); 

당신은 다음과 같은 상태 배열의 각을 정렬 할 수 있습니다 : 당신이 반대 정렬 순서를 원하는 경우

function sortStates(item) { 
    var array = item.m_details; 
    for (var i = 0; i < array.length; i++) { 
     array[i].states.sort(function(a, b) { 
      return a.state.localeCompare(b.state); 
     }); 
    } 
} 

sortStates(data); 

후 바로 .sort() 콜백 인수 ab을 교환합니다.

근무 데모 : http://stackoverflow.com/questions/11099610/generic-way-of-sorting-json-array-by :이 게시물을 읽을 수 있습니다

0

자바 스크립트 배열 객체에는 정렬 기능이 내장 된 정렬 기능이 있습니다. 좀 더 구체적인 정렬을 수행해야하는 경우 (항상) 정렬 함수에 함수를 전달하고 사용자 정의 논리를 구현할 수 있습니다. '-'난 당신이 내가 제공 할 수있는 귀하의 질문에 자세한 내용을 추가해야합니다 추측 문자 This article from W3Schools는에 null 값을 "변환"하는 지금 ...

var points = [40,100,1,5,25,10]; 
points.sort(function(a,b){return b-a}); //sorts numbers in descending order 

여기에 그들 중 하나를 인용 몇 가지 예제를 가지고 좋은 해결책. 왜 그들을 변환해야합니까? 이 json은 어디에서 오는거야?

+0

AngularJs를 사용하여 m_details를 반복하고 두 개의 열에 상태 세부 정보를 표시합니다. Karnataka와 Tamilnadu라는 두 개의 열만 있습니다. json에서 상태 세부 정보를 올바르게 가져 와서 상태 배열이 json에서 일관되게 정렬되지 않은 경우에도 올바른 td를 채워야합니다. REST 서비스에서이 json 데이터를 가져오고 있습니다. – Pradeep

관련 문제