2016-07-19 9 views
0

ここで私のコードは、オプションの年に応じてdbから取り出して、アルファベット順に表示したいと思っています。私はsort()関数を試してみましたが、何も起こらずに助けてください。特定のvalのソートjsonオブジェクト?

$(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

私はval.sort()を試してみました。 json、sort(); – dua

+0

jsonコードは です。public function get_makes_ajax(){ $ json = $ this-> ajax_get_makes(); $ this-> response-> addHeader( 'コンテンツタイプ:アプリケーション/ json'); $ this-> response-> setOutput(json_encode($ json)); } – dua

+0

JSONのサンプルを提供してください。また、ソートする方法に関するいくつかのルール/ガイド –

答えて

1

私の推測では、あなたがこの1に似たオブジェクトを並べ替えしようとしているということです。

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

あなたはありますので、あなたは、オブジェクトのソート()関数を使用することはできませんあなたのデータを配列として再コード化する。具体的には、オブジェクトの配列になります。

var arr = []; 

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

現在(ここでは時系列順に)arrを並べ替えることができます。

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

最後に、あなたは少しの代わりjsonarrを使用するようにコードを変更する必要があるだろう:

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

素晴らしいです。 \t \t \t \t \t \t \t \t \t B = b.make; iが arr.sort(関数(B){ \t \t \t \t \t \t \t \t \t = a.make.toLowerCase()を使用します。 toLowerCaseメソッド(); \t \t \t \t \t \t \t \t \t \t返品a b? 1:0; \t \t \t \t \t \t \t \t \t \t \t})。 – dua

+0

あなたは、それがエラーを与えられたクロムで動作していない理由を教えてくれますか?Uncaught TypeError:Object。値は関数ではありません。私に新しいことを教えてください – dua

+0

@duaもうObject.values()を使わない私の更新された答えを見てください。 (これは、[experimental](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/values)であり、十分にサポートされている方法ではありません。とにかくそれを必要としません。) – Arnauld

関連する問題