VueJS2 сортировать массив JSON

1

Я пытаюсь сортировать массив JSON из JSON файла a.json.

Массив идет следующим образом:

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

Мне нужно отсортировать данные по "псевдониму", поступающему из файла JSON с помощью Vue JS.

Это мой код Javascript для отображения в 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; 
            }
        }
    }

Но функция Sorted не работает, и если я попытаюсь отобразить серверы в отсортированном массиве, я получаю пустую страницу.

И мой цикл for на странице HTML:

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

Надеюсь, это имеет смысл, и я могу заставить его работать.

Теги:
arrays
vuejs2
sorting

1 ответ

1

Вы можете использовать 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?
  • 0
    @ Phoenix Тебе не нужно ждать этого. Либо файл загружается синхронно, и в этом случае массив сортируется только после этого. Или, если файл загружается асинхронно, в этом случае вы должны отсортировать массив, когда обещание разрешается.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню