2016-07-25 3 views
-2

Ich möchte "Jahre" in yearObject des Typs Object sortieren, so dass das Menü mit 2016 statt 2013 beginnt. Bitte helfen. Example Code wird hier bereitgestellt.Wie Werte in meinem Json-Objekt zu sortieren

Mein HTML:

<form name="myform" id="myForm"> 
      <select name="optone" id="yearSel" size="1"> 
       <option value="" selected="selected">Select Year</option> 
      </select> 
      <br> 
      <br> 
      <select name="opttwo" id="stateSel" size="1"> 
       <option value="" selected="selected">Please select year first</option> 
      </select> 
      <br> 
      <br> 
      <select name="optthree" id="citySel" size="1" citySel.onchange = function();> 
      <option value="" selected="selected">Please select state first</option> 
     </select> 
    </form> 

Mein JS:

var yearObject = { 
    "2016": { 
     "California": ["Los Angeles", "San Francisco"], 
     "Florida": ["Orlando", "Miami"], 
     "New York": ["Manhattan","Brooklyn"] 
    }, 
    "2015": { 
     "California": ["Los Angeles", "San Francisco"], 
     "Florida": ["Orlando", "Miami"], 
     "New York": ["Manhattan","Brooklyn"] 
    }, 
    "2014": { 
     "California": ["Los Angeles", "San Francisco"], 
     "Florida": ["Orlando", "Miami"], 
     "New York": ["Manhattan","Brooklyn"] 
    }, 
    "2013": { 
     "California": ["Los Angeles", "San Francisco"], 
     "Florida": ["Orlando", "Miami"], 
     "New York": ["Manhattan","Brooklyn"] 
    } 
} 
window.onload = function() { 
    var yearSel = document.getElementById("yearSel"), 
     stateSel = document.getElementById("stateSel"), 
     citySel = document.getElementById("citySel"); 
    for (var year in yearObject) { 
     yearSel.options[yearSel.options.length] = new Option(year, year); 
    } 
    yearSel.onchange = function() { 
     stateSel.length = 1; // remove all options bar first 
     citySel.length = 1; // remove all options bar first 
     if (this.selectedIndex < 1) { 
      stateSel.options[0].text = "Please select Year first" 
      citySel.options[0].text = "Please select state first" 
      return; // done 
     } 
     stateSel.options[0].text = "Please select state" 
     for (var state in yearObject[this.value]) { 
      stateSel.options[stateSel.options.length] = new Option(state, state); 
     } 
     if (stateSel.options.length==2) { 
      stateSel.selectedIndex=1; 
      stateSel.onchange(); 
     } 

    } 
    yearSel.onchange(); // reset in case page is reloaded 
    stateSel.onchange = function() { 
     citySel.length = 1; // remove all options bar first 
     if (this.selectedIndex < 1) { 
      citySel.options[0].text = "Please select state first" 
      return; // done 
     } 
     citySel.options[0].text = "Please select city" 

     var cities = yearObject[yearSel.value][this.value]; 
     for (var i = 0; i < cities.length; i++) { 
      citySel.options[citySel.options.length] = new Option(cities[i], cities[i]); 
     } 
     if (citySel.options.length==2) { 
      citySel.selectedIndex=1; 
      citySel.onchange(); 
     } 

    } 
citySel.onchange = function(){ 
    switch(citySel.value){ 

case "Los Angeles": 
     if(yearSel.value == "2016"){ 
     location.href="http://google.com"; 
}else if(yearSel.value == "2015","2014"){ 
     location.href= "http://facebook.com"; 
    } 
break; 
case "Miami": 
     if(yearSel.value == "2016","2015"){ 
     location.href="http://google.com"; 
}else if(yearSel.value == "2014","2013"){ 
     location.href= "http://facebook.com"; 
    } 
break; 
    } 
    } 
    } 
+0

bitte Ihr Beispiel und den Code, den Sie versucht, hinzuzufügen. –

+0

http: jsfiddle.net/bond1126/r1nvsta9 –

+0

poste den Code HIER, nicht nur einen Link dazu. und damit meine ich, deine Frage zu bearbeiten. Entpacke keinen Code in einen Kommentar. –

Antwort

0

Sie müssen sich für year separaten Array erstellen und sortieren es sort() Funktion in Javascript.

var sortable = []; 
for (var year in yearObject) { 
    sortable.push(year); 
} 
sortable.sort(function(a, b){return b-a}); 
for (var i = 0; i < sortable.length; i++){ 
    yearSel.options[yearSel.options.length] = new Option(sortable[i], sortable[i]); 
} 

Werfen Sie einen Blick auf die Fiddle

+0

magst du wirklich sortieren jede Schleife? –

+0

@NinaScholz! Sorry sollte nicht so sein, ich werde meine Antwort aktualisieren. Danke –

+0

@NinaScholz! Können Sie eine bessere Idee vorschlagen? –

Verwandte Themen