2016-08-12 79 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/

相关问题