欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue 根據(jù)數(shù)組中某一項(xiàng)的值進(jìn)行排序的方法

 更新時(shí)間:2018年08月30日 10:17:34   作者:Peggy7  
這篇文章主要介紹了vue 根據(jù)數(shù)組中某一項(xiàng)的值進(jìn)行排序的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

vue中數(shù)組和對象的排序

1數(shù)組排序

<div id="app">
  <ul>
   <li v-for="a in arr1">{{a}}</li>
  </ul>
 </div>
  <script type="text/javascript">
   new Vue({
    el:"#app",
    data:{
     arr:[1,4,5,2,3,44]
    },computed:{
     arr1:function(){
      return this.arr.sort(sortNum)//調(diào)用排序方法
     }
    }
   })
   function sortNum(a,b){//排序方法
    return a-b;
   }
  </script>

2對象排序

<div id="app">
   <ul>
    <li v-for="(stu,index) in students1">{{stu}}</li>
   </ul>
  </div>
  <script type="text/javascript">
   new Vue({
    el:"#app",
    data:{
     students:[
      {name:"小a",age:20},
      {name:"小b",age:21},
      {name:"小c",age:18},
      {name:"小d",age:19},
      {name:"小f",age:18}
     ]
    },
    computed:{
     students1:function(){
      return sortKey(this.students,'age')
     }
    }
   })
   function sortKey(array,key){
    return array.sort(function(a,b){
     var x = a[key];
     var y = b[key];
     return ((x<y)?-1:(x>y)?1:0)
    })
   }
  </script>

一、前言

我在vue項(xiàng)目中遇到了一個(gè)表格排序的需求,根據(jù)某一項(xiàng)的值的大小從大到小調(diào)整數(shù)組順序。

二、代碼

表格大概是這個(gè)樣子,樣式和圖片在代碼中簡化了。

<table class="recommend_table" cellspacing="0">
 <tr>
  <th>股票</th>
  <th @click="sort('in_price')">入選價(jià)</th>
  <th @click="sort('now_price')">最新價(jià)</th>
  <th @click="sort('increase')">模擬漲跌幅</th>
 </tr>
 <tr v-for="(item,index) in recommendlist" :key="index">
  <td>
   <div class="recommend_name">{{item.name}}</div>
   <div class="recommend_num">{{item.bn}}</div>
  </td>
  <td>{{item.in_price}}</td>
  <td>{{item.now_price}}</td>
  <td>{{item.increase}}%</td>
 </tr>
</table>

<script type="text/ecmascript-6">
 export default {
  data(){
   return{
    recommendlist: [
     { name:'高科石化', bn:'002778', in_price: 20.68, now_price: 28.68, increase: 10.01 },
     { name:'中孚信息', bn:'300659', in_price: 19.46, now_price: 17.46, increase: 9.06 },
     { name:'永福股份', bn:'300712', in_price: 17.68, now_price: 32.68, increase: 2.01 }
    ],
    sortType: 'in_price'
   }
  },
  methods: {
   sort(type) {
    this.sortType = type;
    this.recommendlist.sort(this.compare(type));
    // switch(type){
     // case 'in_price':
     //  this.sortType = 'in_price';
     //  this.recommendlist.sort(this.compare('in_price'));
     //  break;
     // case 'now_price':
     //  this.sortType = 'now_price';
     //  this.recommendlist.sort(this.compare('now_price'));
     //  break;
     // case 'increase':
     //  this.sortType = 'increase';
     //  this.recommendlist.sort(this.compare('increase'));
     //  break;
    // }
   },
   compare(attr) {
    return function(a,b){
     var val1 = a[attr];
     var val2 = b[attr];
     return val2 - val1;
    }
   }
  }
 }
</script>

1. 排序方法

這里用到的是數(shù)組的sort方法,這個(gè)方法有一個(gè)需要注意的地方,就是不傳參數(shù)的話,將按字母順序?qū)?shù)組中的元素進(jìn)行排序,說得更精確點(diǎn),是按照字符編碼的順序進(jìn)行排序。這并不是我們想要的排序方法,所以必須要傳參。

sort方法的參數(shù)是一個(gè)函數(shù),這個(gè)函數(shù)提供了一個(gè)比較方法,要比較兩個(gè)值,然后返回一個(gè)用于說明這兩個(gè)值的相對順序的數(shù)字。

  1. 若 a 小于 b,在排序后的數(shù)組中 a 應(yīng)該出現(xiàn)在 b 之前,則返回一個(gè)小于 0 的值。
  2. 若 a 等于 b,則返回 0。
  3. 若 a 大于 b,則返回一個(gè)大于 0 的值。
compare(key) {
 return function(a,b){
  var val1 = a[key];
  var val2 = b[key];
  return val2 - val1;
 }
}

在代碼中,compare函數(shù)中的匿名函數(shù)就是這樣一個(gè)函數(shù),但這個(gè)函數(shù)外面又嵌套了一層,這是因?yàn)樾枰鶕?jù)數(shù)組中的某一項(xiàng)來排序,所以需要把這一項(xiàng)的key值傳進(jìn)來。

2. 調(diào)用排序方法

sort(type) {
 this.sortType = type;
 this.recommendlist.sort(this.compare(type));
 // switch(type){
  // case 'in_price':
  //  this.sortType = 'in_price';
  //  this.recommendlist.sort(this.compare('in_price'));
  //  break;
  // case 'now_price':
  //  this.sortType = 'now_price';
  //  this.recommendlist.sort(this.compare('now_price'));
  //  break;
  // case 'increase':
  //  this.sortType = 'increase';
  //  this.recommendlist.sort(this.compare('increase'));
  //  break;
 // }
}

一開始我按照注釋的部分寫的,和我一樣抽象能力不是特別好的人首先會想到要這樣寫,但是寫出來之后發(fā)現(xiàn)三種情況不過是重復(fù)的代碼,這時(shí)我就直接用最上面兩行代碼來代替,寫完以后感覺內(nèi)心一片平和。這種復(fù)用率高的代碼簡直讓人太舒服了。

三、結(jié)語

雖然是一個(gè)簡單的功能,但是非常值得歸納總結(jié)一下。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vuex中的state使用及說明

    vuex中的state使用及說明

    這篇文章主要介紹了vuex中的state使用及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • vue+element項(xiàng)目實(shí)時(shí)監(jiān)聽div寬度的變化

    vue+element項(xiàng)目實(shí)時(shí)監(jiān)聽div寬度的變化

    這篇文章主要介紹了vue+element項(xiàng)目里實(shí)時(shí)監(jiān)聽某個(gè)div寬度的變化,然后執(zhí)行相應(yīng)的事件,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-08-08
  • 淺談vue同一頁面中擁有兩個(gè)表單時(shí),的驗(yàn)證問題

    淺談vue同一頁面中擁有兩個(gè)表單時(shí),的驗(yàn)證問題

    今天小編就為大家分享一篇淺談vue同一頁面中擁有兩個(gè)表單時(shí),的驗(yàn)證問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue-router中query和params的區(qū)別解析

    vue-router中query和params的區(qū)別解析

    vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,適合用于構(gòu)建單頁面應(yīng)用,這篇文章主要介紹了vue-router中query和params的區(qū)別 ,需要的朋友可以參考下
    2022-10-10
  • Vue項(xiàng)目之ES6裝飾器在項(xiàng)目實(shí)戰(zhàn)中的應(yīng)用

    Vue項(xiàng)目之ES6裝飾器在項(xiàng)目實(shí)戰(zhàn)中的應(yīng)用

    作為一個(gè)曾經(jīng)的Java?coder,當(dāng)?shù)谝淮慰吹絡(luò)s里面的裝飾器Decorator,就馬上想到了Java中的注解,當(dāng)然在實(shí)際原理和功能上面,Java的注解和js的裝飾器還是有很大差別的,這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目之ES6裝飾器在項(xiàng)目實(shí)戰(zhàn)中應(yīng)用的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 在Vue.js應(yīng)用中實(shí)現(xiàn)分布式搜索和全文搜索

    在Vue.js應(yīng)用中實(shí)現(xiàn)分布式搜索和全文搜索

    分布式搜索和全文搜索在現(xiàn)代應(yīng)用程序中變得越來越重要,因?yàn)樗鼈兛梢詭椭脩艨焖俨檎液蜋z索大量數(shù)據(jù),Elasticsearch是一種強(qiáng)大的分布式搜索引擎,本文將介紹如何在Vue.js應(yīng)用程序中實(shí)現(xiàn)分布式搜索和全文搜索,以及如何與Elasticsearch集成,需要的朋友可以參考下
    2023-11-11
  • Vite中自制mock服務(wù)器(不使用第三方服務(wù))

    Vite中自制mock服務(wù)器(不使用第三方服務(wù))

    本文主要介紹了Vite中自制mock服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 淺析Vue.js中$emit和$on的用法和區(qū)別

    淺析Vue.js中$emit和$on的用法和區(qū)別

    在?Vue.js?中,$emit和$on方法是兩個(gè)常用的方法,用于實(shí)現(xiàn)組件間的通信,雖然它們的名字很相似,但它們的作用和用法有所不同,本文將介紹$emit和$on方法的區(qū)別,并通過代碼示例來說明它們的用法,感興趣的朋友可以參考下
    2023-07-07
  • 解決vue中使用history.replaceState?更改url?vue?router?無法感知的問題

    解決vue中使用history.replaceState?更改url?vue?router?無法感知的問題

    這篇文章主要介紹了vue中使用history.replaceState?更改url?vue?router?無法感知的問題,本文給大家分享修復(fù)這個(gè)問題的方法,需要的朋友可以參考下
    2022-09-09
  • Vue組件通信之父傳子與子傳父深入探究

    Vue組件通信之父傳子與子傳父深入探究

    對于vue來說,組件之間的消息傳遞是非常重要的,用vue可以是要組件復(fù)用的,而組件實(shí)例的作用域是相互獨(dú)立,這意味著不同組件之間的數(shù)據(jù)無法互相引用,一般來說,組件之間可以有幾種關(guān)系,下面是我對組件之間消息傳遞的常用方式的總結(jié)
    2022-12-12

最新評論