解决vue elementUI中table里数字、字母、中文混合排序问题

想要解决Vue ElementUI中的Table里数字、字母、中文混合排序问题,我们需要引入一个第三方库:pinyin。pinyin可以将汉字转换成拼音,这可以帮助我们对含有中文的字符串进行排序。

下面是解决这一问题的完整攻略:

  1. 安装pinyin

在终端中输入以下命令进行pinyin的安装:

npm install pinyin --save
  1. 对Table数据进行处理

在Vue组件中对含有中文的数据进行处理,将中文转换成对应的拼音并添加一个名为pinyin的属性。在这个属性中,我们将会存储转换后的拼音。

import Pinyin from 'pinyin';

export default {
  data() {
    return {
      tableData: [
        { name: '张三', age: 25 },
        { name: '李四', age: 20 },
        { name: '王五', age: 30 }
      ]
    };
  },
  created() {
    this.tableData.forEach(item => {
      // 将中文名字转换成拼音,并添加一个pinyin属性
      item.pinyin = Pinyin(item.name, {
        style: Pinyin.STYLE_FIRST_LETTER
      }).join('');
    });
  }
}

在这个代码中,我们将pinyin引入,并在Vue组件的created生命周期中对数据进行处理。我们通过调用pinyin方法,并传入每个数据对象中含有中文的属性名和一个拼音转换参数,将每个数据对象中含有中文的属性转换成对应的拼音,并存储在一个新的pinyin属性中。

在这里我们参考了pinyin的GitHub页面来学习如何使用该库。

  1. 实现Table的排序功能

在Table组件中将排序方法设置为一个自定义的方法,然后在点击表头的时候调用该方法。

<el-table :data="tableData" :sort-method="sortTableData">
  <el-table-column prop="name" label="姓名"></el-table-column>
  <el-table-column prop="age" label="年龄"></el-table-column>
</el-table>

在这个代码中,我们为Table组件设置了一个sort-method属性,并将其设置为与组件同名的方法sortTableData。当表头被点击时,该方法将被调用。

下面是sortTableData方法的实现:

sortTableData(data, sortParams) {
  const { prop, order } = sortParams;
  const ascendOrDescend = (order === 'asc') ? -1 : 1;

  return data.sort((a, b) => {
    const first = a.pinyin;
    const second = b.pinyin;

    if (first > second) {
      return 1 * ascendOrDescend;
    } else if (first < second) {
      return -1 * ascendOrDescend;
    } else {
      return 0;
    }
  });
}

在这个方法中,我们首先获取了排序参数和排序方式,将其存储在变量proporder中。我们通过将升序排序乘以-1,便可以将其变为降序排序。

接着,我们使用Array.sort()方法对拥有pinyin属性的数据数组进行排序。如果pinyin属性第一个数据的值大于第二个数据的值,就按照order的值将它们排列。如果第二个数据的值大于第一个数据的值,同样进行排列。如果两个值相同,则返回0。

现在你已经有了一个可排序的Table,其会将含有中文数据的属性转换成拼音,并默认按照拼音排序。如果你需要按照其他的属性进行排序,只需在sort-method属性中使用不同的方法即可。

接下来是一个有中文、拼音和数字数据的示例:

this.tableData = [
  { name: '张三', age: 25, address: '北京', phone: '187*****51' },
  { name: 'baby', age: 20, address: '上海', phone: '131*****45' }, 
  { name: 'lihua', age: 31, address: '深圳', phone: '138*****12' },
  { name: '李四', age: 22, address: '广州', phone: '187*****92' }, 
  { name: 'John', age: 28, address: '美国', phone: '+19272*****' }
];

我们需要对name属性进行排序。以下是结果:

排序前:

姓名 年龄 地址 电话
张三 25 北京 187*51
baby 20 上海 131*45
lihua 31 深圳 138*12
李四 22 广州 187*92
John 28 美国 +19272*

排序后:

姓名 年龄 地址 电话
baby 20 上海 131*45
John 28 美国 +19272*
lihua 31 深圳 138*12
李四 22 广州 187*92
张三 25 北京 187*51

在这个例子中,baby排在了第一位,因为它的名字是字母,所以在拼音排序时排在了最前面。紧随其后的是John,因为它的名字也是字母,但是拼音比baby的长。最后排在第一位的是张三,因为其名字是一个纯中文字符串。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决vue elementUI中table里数字、字母、中文混合排序问题 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue按时间段查询数据组件使用详解

    关于“Vue按时间段查询数据组件使用详解”的完整攻略,我来详细讲解如下: 一、背景 在开发Web应用程序时,常常需要按时间段查询数据。如果每个查询功能都自己写一遍,那代码量会非常庞大,而且不利于维护和更新。为了更高效地开发查询功能,本文将介绍一种Vue组件的开发,该组件可以根据指定的时间段来查询数据。 二、组件设计 我们将设计一个“按时间段查询数据”的Vue…

    Vue 2023年5月29日
    00
  • VueJS 组件参数名命名与组件属性转化问题

    VueJS 组件能够让我们用单个组件来定义特定状态下的 UI。在组件内部,通常会存在着 props 对象,用于指定组件的外部属性。然而,在指名组件属性的时候,一些参数名可能会被转化成别的名称,这给开发者造成了很多困扰。下面就是完整的攻略,涵盖了参数名命名和属性转换两个方面。 组件参数名命名 Vue 组件参数名的使用一般分为 kebab-case、camelC…

    Vue 2023年5月27日
    00
  • vue+moment实现倒计时效果

    实现倒计时效果是前端项目中常见的需求。本文将介绍如何使用vue和moment.js库实现倒计时效果,并提供两个示例进行说明。 步骤一:安装moment.js库 在使用moment.js库之前,我们需要先进行安装。具体步骤如下: npm install moment –save 这样就可以在vue项目中使用moment.js库了。 步骤二:在vue组件中引入…

    Vue 2023年5月29日
    00
  • vue实例成员 插值表达式 过滤器基础教程示例详解

    我将为你讲解“vue实例成员 插值表达式 过滤器基础教程示例详解”的攻略。 Vue实例成员 Vue实例是最基本的构成单元,具有许多成员属性和方法。其中,常用的实例成员包括:data、methods、computed、watch等等。 data data属性是用来注册Vue实例的数据属性。它能让Vue跟踪数据的变化,当数据变化时,它会通知到相关的视图以及组件等…

    Vue 2023年5月27日
    00
  • axios如何取消重复无用的请求详解

    当我们使用 axios 发送请求时,可能会出现多次发送同样的请求,这种情况可能会降低我们应用的性能。因此我们需要控制请求的发送,以避免重复无用的请求。 使用 axios 取消请求有 3 种方式: 使用 CancelToken 取消请求。 const CancelToken = axios.CancelToken; let cancel; axios.get(…

    Vue 2023年5月28日
    00
  • 详解Vue3 父组件调用子组件方法($refs 在setup()、<script setup> 中使用)

    从Vue3开始,推荐使用<script setup>语法,这是Vue3的新语法之一,并且它的使用方式与Vue2非常不同。使用<script setup>,我们可以更轻松地导入我们需要的属性、方法和生命周期函数,并且可以在组件之间更轻松地共享数据和方法。 在Vue3中,如果父组件想要调用子组件的方法,可以使用$refs。在Vue3中,我…

    Vue 2023年5月28日
    00
  • Vue指令指令大全

    Vue指令是Vue.js的核心特性之一,为Vue.js提供了非常灵活和强大的操作DOM的能力。下面是Vue.js中常用的指令指令: v-text 指令格式:v-text 功能:用于在元素中输出文本内容,和插值表达式{{}}相同 示例: <!– Vue实例 –> <div id="app"> <p v-te…

    Vue 2023年5月27日
    00
  • Ant Design Vue日期组件的时间限制方式

    Ant Design Vue 是 Ant Design 在 Vue 中的实现,是一套基于 Vue 实现的高质量 UI 组件库,拥有丰富的组件和良好的设计风格,深受前端工程师的喜爱。 Ant Design Vue 提供了日期组件,我们可以通过设置时间限制方式来限定用户选择日期的范围,例如限制用户只能选择今天及今天之后的日期,或者只能选择本月份的日期等等。 下面…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部