2017-10-28 10 views
1

JSONファイルをJSONファイルa.jsonからソートしようとしています。VueJS2 sort JSON array

配列は次のように来ている:私はVueのJSとJSONファイルから来て、「エイリアス名」でデータをソートする必要が

{"data": 
    [ 
     {"exception":"", 
     "name":"Data Server1", 
     "alias":"TOR-Server", 
     "delayed":"NO", 
     }, 
     {"exception":"", 
     "name":"Data Server2", 
     "alias":"FRA-Server", 
     "delayed":"NO", 
     } 
    ] 

これは、VueのJS

<script type="text/javascript"> 

    var app = new Vue({ 
    el: '#app', 
    data: { 
    json: null 
    }, 

    computed: { 

     sorted: function() { 
      setTimeout(function() { 
      var app = this.app.json 
      if (app.length >= 6) 
      return app; 
       }, 5000); 
      } 
    }, 

    methods: { 
     toggleClass(){ 
      if (this.failed == true){ 
       this.failed = false;  
      } 
      else 
      { 
       this.failed = true; 
      } 
     } 
    } 

に表示するための私のJavascriptのコードですが、ソート機能が働いていないと私はソートされた配列内のサーバーを表示しようとすると、私は空白のページを受け取ります。

そして、私のHTMLページ内のループのためには、次のとおりです。

<div class="mainbutton" v-for="(server, index) in json.data "> 

希望は、これは理にかなっていると私はそれが働いて得ることができます。

答えて

0

計算された内部でArray.sortを使用すると、ソートされた配列を返すことができます。

たとえば、配列の項目をnameプロパティでソートするには、this.json.sort((t1,t2) => t1.name < t2.name ? -1 : 1)を呼び出すことができます。

はここで働い抜粋です:

var app = new Vue({ 
 
    el: '#app', 
 
    data: { 
 
    json: [ 
 
     { 
 
     "exception": "", 
 
     "name": "Data Server3", 
 
     "alias": "TOR-Server", 
 
     "delayed": "NO", 
 
     }, 
 
     { 
 
     "exception": "", 
 
     "name": "Data Server1", 
 
     "alias": "TOR-Server", 
 
     "delayed": "NO", 
 
     }, 
 
     { 
 
     "exception": "", 
 
     "name": "Data Server2", 
 
     "alias": "FRA-Server", 
 
     "delayed": "NO", 
 
     } 
 
    ] 
 

 
    }, 
 

 
    computed: { 
 
    sortedJson: function() { 
 
     return this.json.sort((t1,t2) => t1.name < t2.name ? -1 : 1); 
 
    }, 
 
    sorted: function() { 
 
     setTimeout(function() { 
 
     var app = this.app.json 
 
     if (app.length >= 6) 
 
      return app; 
 
     }, 5000); 
 
    } 
 
    }, 
 

 
    methods: { 
 
    toggleClass() { 
 
     if (this.failed == true) { 
 
     this.failed = false; 
 
     } else { 
 
     this.failed = true; 
 
     } 
 
    } 
 
    } 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.2/vue.min.js"></script> 
 

 
<div id="app"> 
 
    <div class="mainbutton" v-for="(server, index) in sortedJson "> 
 
    {{server.name }} 
 
    </div> 
 
</div>

+0

こんにちは、素敵なスニップをありがとう、それが動作します。すべての配列がソートされていますが、Vue JS v-forループのタイムアウトを設定するにはどうすればよいかわかりません。まず、データがJSONファイルからロードされるのを待ってからデータをソートする必要があるからです並べ替えられた配列を取得して表示しますか? v-forループのタイムアウトを設定するにはどうすればよいですか? – Phoenix

+0

@Phoenixあなたは本当にそれを待つ必要はありません。ファイルが同期して読み込まれると、配列はそれ以降にソートされます。または、ファイルが非同期にロードされている場合は、約束が解決されたときに配列をソートする必要があります。 – Nisarg