2014-04-09 31 views
0

下面是我擁有的包含狀態數組的json數據。數組的大小始終爲2,但數組元素的順序不固定。數組元素值可以爲null。樣本數據如下圖所示:排序JavaScript中的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. 如何將空值轉換爲某種默認的文本說「 - 」。
  2. 如何按asc或desc順序對所有狀態進行排序。
+1

你可以看到這篇文章,看看如何訂購一個JSON對象:http://stackoverflow.com/questions/11099610/generic-way-of-sorting-json-array-by - 屬性 – TlonXP

+0

要將空值轉換爲文本,您需要編寫for循環來遍歷數組,並通過for..in循環遍歷對象中的每個鍵。檢查每個值是否爲空,並將值設置爲所需的字符串。 –

+1

one more 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); 

如果你想相反的排序順序,然後只是交換參數ab.sort()回調。

工作演示:http://jsfiddle.net/jfriend00/MTQ86/

0

只是爲了您的信息JavaScript數組對象有一個排序函數,實現了一些基本的內置排序功能。如果您需要執行更具體的排序(您可以),則始終可以將函數傳遞給排序函數並實現您自己的定製邏輯。 This article from W3Schools有一些例子引述他們在這裏的一個...

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並在兩列中顯示狀態詳細信息。只有兩列,即卡納塔克邦和泰米爾納德邦。我需要正確地從json中提取狀態細節,並填充正確的td,即使狀態數組沒有一致地排列在json中。 我從REST服務獲取這個json數據。 – Pradeep