2012-07-17 3 views
0
{ 
    "JsonResult": { 
     "List": [{ 
      "Subject": "Something", 
      "Type": 0, 
      "TypeDescription": "Referral" 
     }], 
    } 
} 

내 서비스를받는 동안 얻을 수있는 샘플 json 응답입니다. 그 다음에 Subject, Type and TypeDescription과 같은 옵션이있는 버튼이 있습니다.내 JSON 응답 정렬

내가 보내는 매개 변수를 기반으로 Json 응답을 정렬 할 수 있습니까?

function sortItems(jsonResponse,paramater){ 
      var sorted = jsonResponse.List.sort(function(a, b) { 
      var nameA = a.paramater.toLowerCase(), 
      nameB = b.paramater.toLowerCase(); 
      return nameA.localeCompare(nameB); 
} 

여기는 내가 사용하고 있지만 작동하지 않는 정렬 기능입니다. 이미 JSON 응답이 있고 내가 보내는 인수를 기반으로 런타임에 정렬해야합니다.

+1

는 그것은'jsonResponse.JsonResult.List.sort (...)' – Matt

+0

http://stackoverflow.com/questions/979256/how-to-sort-해야처럼 보인다 배열 자바 스크립트 객체 –

답변

0

은 JS입니다 당신에게 깊은 통찰력을 줄 수있는 바이올린.

http://jsfiddle.net/spechackers/EdAWL/

<script type="text/javascript"> 
     onerror = function (a, b, c) { 
      alert([a, b, c]); 
     }; 
    </script> 
<script type="text/javascript"> 
    var x = { 
     "JsonResult": { 
      "List": [{ 
       "Subject": "My book report on J. K. Rowling's <u>Harry Potter</u> series.", 
       "Date": "Jan 25th 2009", 
       "Type": "Book Report", 
       "Class": "English" 
      }, { 
       "Subject": "My book report on Charles Dickens' <u>Oliver Twist</u> novel.", 
       "Date": "May 1st 2003", 
       "Type": "Book Report", 
       "Class": "English" 
      }, { 
       "Subject": "My book report on J. R. R. Tolkien's <u>The Lord of the Rings</u> series.", 
       "Date": "Aug 7th 2007", 
       "Type": "Book Report", 
       "Class": "English" 
      }, { 
       "Subject": "The civil war in a nutshell.", 
       "Date": "Feb 26th 2009", 
       "Type": "Essay", 
       "Class": "History" 
      }, { 
       "Subject": "How does the republican party manage if we life in a democracy?", 
       "Date": "Apr 5th 2010", 
       "Type": "Essay", 
       "Class": "Government" 
      }, { 
       "Subject": "A bogus entry", 
       "Date": "Jan 1st 2000", 
       "Type": "Bogus", 
       "Class": "None" 
      }, { 
       "Subject": "Zombie followers don't prove anything.", 
       "Date": "Nov 2nd 2004", 
       "Type": "Essay", 
       "Class": "Religion" 
      }] 
     } 
    }; 
</script> 
<script type="text/javascript"> 
    if (typeof Object.prototype.toSource == 'undefined') { 
     Object.prototype.toSource = function() { 
      return (typeof JSON != 'undefined' && typeof JSON.stringify == 'function') ? JSON.stringify(this) : this.toString(); 
     }; 
    } 

    function sortItems(jsonResponse, paramater) { 
     var sorted = jsonResponse.List.sort(

     function (a, b) { 
      var nameA = a[paramater].toLowerCase(); 
      var nameB = b[paramater].toLowerCase(); 
      return nameA.localeCompare(nameB); 
     }); 
     return sorted; 
    } 

    function makeRow(ar) { 
     return "<tr><td>" + ar[0] + "</td><td>" + ar[1] + "</td><td>" + ar[2] + "</td><td>" + ar[3] + "</td></tr>"; 

    } 
</script> 
<script type="text/javascript"> 
    var mySortedList = sortItems(x.JsonResult, "Subject"); 
    //alert(mySortedList.toSource()); 
    var outTable = "<table>"; 
    outTable += "<tr><th>Subject</th><th>Date</th><th>Type</th><th>Class</th></tr>"; 
    for (var i = 0; i < mySortedList.length; i++) { 
     outTable += makeRow([mySortedList[i].Subject, mySortedList[i].Date, mySortedList[i].Type, mySortedList[i].Class]); 
    } 
    outTable += "</table>"; 
    document.write(outTable); 
</script> 
1
function sortItems(jsonResponse, paramater) { 
     var sorted = jsonResponse.JsonResult.List.sort(function(a, b) { 
      var nameA = a[paramater].toLowerCase(), //take note, [] 
      nameB = b[paramater].toLowerCase(); //same here 
      return nameA.localeCompare(nameB); 
     }); 
} 

두 번째 인수 인 '매개 변수'는 직접 필드 접근 자 문이 아니라 검색 할 키를 나타내는 문자열입니다. 따라서 점 연산자를 사용하여 json에서 액세스 할 수 없습니다. 또한

주의해야합니다 : 그것은해야한다 : 일부 트릭 여기를 참조하십시오 :

jsonResponse.JsonResult.List.sort 

A가 다시 동안, 내가 같은 일을하고 싶었
유래 : Sorting array of custom objects in JavaScript 여기