Sort an array in Vue.js

前端 未结 5 798
时光取名叫无心
时光取名叫无心 2020-12-13 00:02

How can I sort an array by name or sex before displaying it in a v-for loop? https://jsfiddle.net/rg50h7hx/

相关标签:
5条回答
  • 2020-12-13 00:21

    Easy way; You can use computedArray instead of array

    computed: {
    computedFonksiyon() {
      this.arrays.sort(function(x, y) {
        return y.name- x.name;
      });
      return this.arrays;
    }
    }
    
    0 讨论(0)
  • 2020-12-13 00:22

    Yes, an easy way to do this can be create a computed property which can return the sortedArray, like following:

    computed: {
      sortedArray: function() {
        function compare(a, b) {
          if (a.name < b.name)
            return -1;
          if (a.name > b.name)
            return 1;
          return 0;
        }
    
        return this.arrays.sort(compare);
      }
    }
    

    See working demo.

    You can find the documentation of sort here which takes a compareFunction.

    compareFunction Specifies a function that defines the sort order. If omitted, the array is sorted according to each character's Unicode code point value, according to the string conversion of each element.

    0 讨论(0)
  • 2020-12-13 00:34

    Html side

    <div id="string">
          <ul>
            <li v-for="array in sortArrays(arrays)">{{ array.name }}</li>
          </ul>
        </div>
    

    Vue js code || Using Lodash

    var string = new Vue({
      el: '#string',
      data: {
        arrays: [
          { name: 'kano',    sex: 'man' },
          { name: 'striker', sex: 'man' },
          { name: 'sonya',   sex: 'woman' },
          { name: 'sindell', sex: 'woman' },
          { name: 'subzero', sex: 'man' }
        ]
      },
      methods: {
         sortArrays(arrays) {
                return _.orderBy(arrays, 'name', 'asc');
            }
      }
    })
    
    • in orderBy function, first argument is array, 2nd argument is key (name / sex) 3rd argument is order (asc / desc)
    0 讨论(0)
  • 2020-12-13 00:47

    with arrow functions es6:

    sortedArray(){
        return this.arrays.sort((a, b) => a.name - b.name );
    }
    
    0 讨论(0)
  • 2020-12-13 00:47

    This works really cool:

    sortFunc: function (){
      return this.arrays.slice().sort(function(a, b){
        return (a.name > b.name) ? 1 : -1;
      });
    }
    

    call the function from HTML:

    <div id="string">
     <ul>
       <li v-for="array in sortFunc()">{{ array.name }}</li>
     </ul>
    </div>
    
    0 讨论(0)
提交回复
热议问题