2016-08-12 77 views
1

我有多個從JSON填充的行。我正在使用迭代的每個循環。我有一個選擇下拉列表中有四個值,其中一個是默認情況。我想根據從下拉列表中選擇的值對行進行排序。例如,如果下拉列表值爲'x',請使用JSON中的'y'鍵進行排序。當選擇默認值時,頁面應該顯示爲原樣。根據選擇的下拉值對多行(從JSON填充)進行排序

jsonData.jsonArray.sort(function(a, b) { 
      if ($("#custom-dropdown").val()=="Active") { 
       return (b.status> a.status) ? 1 : ((a.status< b.status) ? -1 : 0); 
      } else if ($("#custom-dropdown").val()=="End date") { 
       return (b.endDate > a.endDate) ? 1 : ((b.endDate < a.endDate) ? -1 : 0); 
      } else if ($("#custom-dropdown").val()=="Nearest end date"){ 
       return (b.endDate > a.endDate) ? 1 : ((b.endDate < a.endDate) ? -1 : 0); 
      } else{ 
       return 0; 
      } 
     }); 

JSON-

var jsonData={ 
    "status": "200", 
    "jsonArray": [ 
    { 
     "startDate": "2014-05-27",, 
     "status": "true", 
     "endDate": "2016-05-27", 
    }, 
    { 
     "startDate": "2012-05-27",, 
     "status": "false", 
     "endDate": "2013-05-27", 

    } 
    ] 

} 選擇下拉結構 -

<div id="custom-dropdown"> 
      <select class="selectpicker"> 
        <option data-divider="true">Default</option> 
        <option data-divider="true">Active</option> 
        <option data-divider="true">End date</option> 
        <option data-divider="true">Nearest end date</option> 
      </select> 
     </div> 

注:當選擇下拉爲Active然後排序狀態。 2.當選擇的下拉列表值是結束日期時,按升序排列按結束日期 3.當下拉值爲臨近結束日期時,按降序排列結束日期。 4.當dropdon價值是默認然後排序不應該發生

任何人都可以讓我知道我做錯了,因爲排序不會發生在頁面中。

謝謝。

+0

什麼是你的json的結構?此外,您正在嘗試對數組進行排序。但是,您正在使用排序函數內的對象。把完整的數據,以獲得幫助 – Mojtaba

+0

我假設你已經設置了'onchange'觸發器的'#custom-dropdown'運行sort函數?像[this](https://jsfiddle.net/gb5v6ta4/1/) – tewathia

回答

0

似乎是爲我工作。 Here是一個示例小提琴,演示了排序數據的簡單字符串化。我剛纔說的觸發重新填充時,在下拉菜單中的值被改變

$("#custom-dropdown").on("change", function() { 
    populate(this.value); 
}); 
0
var jsonData = { 
    "status": "200", 
    "jsonArray": [{ 
    "startDate": "2014-05-25", 
    "status": "true", 
    "endDate": "2016-05-25", 
    }, { 
    "startDate": "2012-05-26", 
    "status": "false", 
    "endDate": "2013-05-26", 

    },{ 
    "startDate": "2014-05-27", 
    "status": "true", 
    "endDate": "2016-05-27", 
    }] 
    } 

    var json_sort = function() { 
    var newjsonArray = jsonData.jsonArray.slice(0); 
    var custom_dropdown = document.getElementById('custom-dropdown'); 
    return newjsonArray.sort(function(a, b) { 
     switch (custom_dropdown.value) { 
      case 'Active': 
      return (b.status > a.status) ? 1 : ((a.status < b.status) ? -1 : 0); 
      break; 
      case "End date": 
      return (b.endDate < a.endDate) ? 1 : ((b.endDate > a.endDate) ? -1 : 0); 
      break; 
      case "Nearest end date": 
      return (b.endDate > a.endDate) ? 1 : ((b.endDate < a.endDate) ? -1 : 0); 
      break; 
      default: 
      return 0; 
     } 
     }); 
    } 

二是從你的錯誤,第一個是,你使用相同的陣列,所以默認狀態總是失敗。記得JavaScript總是經過引用。所以我克隆了數組並返回。在「結束日期」的下一個條件中,條件箭頭必須朝相反的方向排序,才能在相反的方向排序。其餘排序工作正常。 Ckeckout這個工作jsfiddle:https://jsfiddle.net/a9vsfrbx/8/

相關問題