2016-07-19 7 views
0

Hier ist mein Code Abruf von db nach Jahr in Option jetzt möchte ich alphabetisch anzeigen lassen. Ich habe versucht, sort() -Funktion, aber nichts passiert, bitte helfen.Sortier-JSON-Objekt für bestimmtes Wert?

$(document).ready(function() { 

    //on change year change makes 
    $('#years').change(function() { 
    $('#makes').attr("disabled",true); 
    $('#makes').empty(); 
    $('#makes').append($("<option></option>") 
         .attr("value", 0) 
         .text("Select Makes")); 
    $.get('index.php?route=common/custom_search/get_makes_ajax&token=<?php echo $token; ?>', 
      function (json) { 
     if (json) { 
     $.each(json, function (key, val) { 
      $('#makes') 
      .append($("<option></option>") 
        .attr("value", key) 
        .text(val)); 
      console.log(json); 
     }); 
     $('#makes').removeAttr("disabled"); 
     //    console.log(json); 
     } else { 
     console.log('this is not working!'); 
     } 

    }); 
    $('#models').attr("disabled",true); 
    $('#sub_models').attr("disabled",true); 
    $('#engines').attr("disabled",true); 
    $('#parts').attr("disabled",true); 
    $('#search_button').attr("disabled",true); 
    }); 
} 
+0

Ich habe versucht val.sort(); json, sort(); – dua

+0

JSON-Code ist öffentliche Funktion get_makes_ajax() { $ json = $ this-> ajax_get_makes(); $ this-> response-> addHeader ('Content-Type: application/json'); $ this-> response-> setOutput (json_encode ($ json)); } – dua

+0

} Könnten Sie bitte ein Beispiel JSON zur Verfügung stellen, und einige Regeln/Anleitung, wie Sie es sortiert haben möchten –

Antwort

1

Meine Vermutung ist, dass Sie ein Objekt ähnlich wie diese zu sortieren sind versucht, ein:

var json = { 
     id1: 1998, 
     id2: 1975, 
     id3: 1983 
    }; 

Sie können nicht die sort() Funktion auf einem Objekt verwenden, so dass Sie werden um Ihre Daten als Array zu rekodieren. Genauer gesagt wird es eine Anordnung von Objekten werden.

var arr = []; 

Object.keys(json).forEach(function(id) { 
    arr.push({ id: id, year: json[id] }); 
}); 

Wir können jetzt arr sortieren (hier in chronologischer Reihenfolge):

arr.sort(function(a, b) { return a.year - b.year; }); 

Schließlich müssen Sie leicht Ihren Code modifizieren arr zu verwenden, anstatt json:

$.each(arr, function (key, val) { 
    $('#makes') 
    .append($("<option></option>") 
      .attr("value", val.id) 
      .text(val.year)); 
}); 
+0

großartig, es funktioniert für. i verwendet arr.sort (Funktion (a, b) { \t \t \t \t \t \t \t \t \t a = a.make.toLowerCase(); \t \t \t \t \t \t \t \t \t b = b.make. toLowerCase(); \t \t \t \t \t \t \t \t \t \t Rückgabe a b? 1: 0; \t \t \t \t \t \t \t \t \t \t \t}); – dua

+0

werden Sie mir bitte sagen, warum es nicht mit Chrome funktioniert, gab es einen Fehler Uncaught TypeError: Object.Werte sind keine Funktion. Bitte helfen Sie mir, ich bin neu – dua

+0

@ dua Bitte sehen Sie meine aktualisierte Antwort, die 'Object.values ​​()' nicht mehr verwendet. (Dies ist ein [experimentell] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/values), nicht gut unterstützte Methode, und wir brauchen es sowieso nicht wirklich .) – Arnauld

Verwandte Themen