js字符串对比之localeCompare()方法-对字符串进行排序——大于0-升序、小于0-降序 & 对el-table的列进行排序sort-change

js字符串对比之localeCompare()方法-对字符串进行排序——大于0-升序、小于0-降序 & 对el-table的列进行排序sort-change

js提供了字符串的对比方法localeCompare(),该方法返回的是一个数字用来表示一个参考字符串和对比字符串是排序在前,在后或者相同。该方法基本不单独使用,大部分时间是配合字符串排序使用的。

1、语法
string.localeCompare(targetString,locales,options);

参数:

  • targetString:对比字符串

  • locales:用来表示一种或多种语言或区域的一个符合 BCP 47 标准的字符串或一个字符串数组,如:‘zh’

  • options:是单个活对象组成的多个参数,主要的可以到MDN去查

2、返回值

返回值:是一个数字,目前的主流浏览器都返回的是1、0、-1三个值,但是也有其他情况,所以不可以用绝对的值等于1、-1这种去判断返回的结果

  • 返回值大于0-升序:说明当前字符串string大于对比字符串targetString

  • 返回值小于0-降序:说明当前字符串string小于对比字符串targetString

  • 返回值等于0:说明当前字符串string等于对比字符串targetString

3、应用
3.1、单独使用

方法的单独调用:就是简单的去对比两个字符串,查看其返回值就好。

var str = 'aaa',
	strCom = 'bbb',
	strCom2 = 'aaa';
str.localeCompare(strCom); //-1
strCom.localeCompare(str); //1
str.localeCompare(strCom2); //0
3.2、配合排序使用

配合排序的调用:该方法用来单独比较字符串的情况比较少,大多数情况下是配合字符串的排序下使用的。

ar strList = ['cc', 'ee', 'ca', 'aa'];
 
strList.sort((a, b) => {
	return a.localeCompare(b);
});
console.log(strList);   //["aa", "ca", "cc", "ee"]
4、对el-table中的列进行排序
<template>
    <el-table
      ref="filterTable"
      :data="tableData"
      border
      :max-height="maxHeight"
      :highlight-current-row="true"
      @row-dblclick="rowDblClick"
      @sort-change="changeTableSort"
              >
      <el-table-column
        fixed
        label="序号"
        type="index"
        width="45"
      />
      <el-table-column
        label="检查规格号"
        prop="ruleId"
        min-width="105"
        :sortable="'custom'"
        show-overflow-tooltip
      />    
    </el-table>
</template>

<script>
export default{
 methods:{
    //排序触发事件
    changeTableSort({order}) {
      if (order === 'ascending') {
        this.tableData.sort((a, b)=> a.ruleId.localeCompare(b.ruleId, 'zh')); //a~z 排序
      } if (order === 'descending') {
        this.tableData.sort((a, b)=> b.ruleId.localeCompare(a.ruleId, 'zh')); //z~a 排序
      }
    },         
  }
}
</script>
5、复杂场景排序应用

排序效果

在这里插入图片描述

1

// 语言代码
const langCodeList = Object.freeze([
  { label: '大陆', value: 'CHI' },
  { label: '港澳', value: 'CHT' },
  { label: '英文', value: 'ENG' },
  { label: '葡文 ', value: 'POR' },
]);

2

var nameList = [
{NAME_CLASS:3,LANG_CODE:'CHI'},{NAME_CLASS:6,LANG_CODE:'BHI'},     {NAME_CLASS:7,LANG_CODE:'CHT'},{NAME_CLASS:1,LANG_CODE:'POR'},{NAME_CLASS:4,LANG_CODE:'CHI'},{NAME_CLASS:8,LANG_CODE:'CHT'},{NAME_CLASS:10,LANG_CODE:'CHI'},{NAME_CLASS:3,LANG_CODE:'ENG'},{NAME_CLASS:5,LANG_CODE:'CHI'}
]

         
nameList.sort((a, b)=> {
  //  1、LANG_CODE中文名称展示在前
  if ( a.NAME_CLASS === b.NAME_CLASS){
    return a.LANG_CODE.localeCompare(b.LANG_CODE);
  }
  //  2、NAME_CLASS排列优先级1>3>5>6>7>8>10>4
  if ( a.NAME_CLASS > b.NAME_CLASS  && b.NAME_CLASS !== 4 || a.NAME_CLASS === 4 ) {
    return 2;
  } else {
    return -2;
  }
});
console.log('排序后',nameList);
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你在使用 Element UI 的 el-table 组件,并且想要自定义排序字段名字,可以通过使用 scoped slots 中的 header 自定义表头内容,然后在其中定义排序字段名字。 例如,如果你的数据中有一个名为 name 的字段,但是你想要在表格中将其显示为 "姓名",并使用该字段进行排序,你可以这样做: ```html <el-table :data="tableData" :sort-by="'name'"> <el-table-column prop="name" label="姓名"> <template slot="header"> <span @click="changeSort('name')">姓名</span> </template> </el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> ``` 在上面的代码中,我们使用了 `:sort-by="'name'"` 来指定使用 name 字段进行排序。然后在姓名表头的 scoped slot 中,我们定义了一个 `changeSort` 方法来切换排序方向,并将排序字段名字设为 "name"。 你可以根据自己的需要修改代码中的字段名字和表头显示内容。 ### 回答2: 在使用Element UI的el-table组件进行表格展示时,可以通过自定义排序名字字段来实现对数据的排序功能。 首先,在el-table的columns配置中,通过设置sortable属性为true,将该字段设置为可排序的。例如: ```html <el-table :data="tableData" border> <el-table-column prop="name" label="姓名" sortable></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> </el-table> ``` 其中,prop属性指定了数据对象中对应的字段,label属性用于显示表头的名称。通过给姓名字段的el-table-column添加sortable属性,即可实现对该字段的排序。 接着,在Vue实例中,可以使用自定义的排序方法对姓名字段进行排序。例如,在data中定义一个sortMethod方法来处理排序逻辑: ```javascript data() { return { tableData: [ { name: '张三', age: 18 }, { name: '李四', age: 20 }, { name: '王五', age: 22 }, ] }; }, methods: { sortMethod(a, b) { return a.localeCompare(b); // 使用localeCompare方法进行字符串排序 } } ``` 最后,将sortMethod方法通过升序(ascending)或降序(descending)排序传递给el-tablesort-method属性,即可实现对姓名字段的自定义排序。 ```html <el-table :data="tableData" border> <el-table-column prop="name" label="姓名" sortable :sort-method="sortMethod"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> </el-table> ``` 这样,点击姓名表头便可以根据自定义的排序方法对姓名字段进行排序了。通过以上步骤,就可以实现el-table组件的自定义排序名字字段的功能。 ### 回答3: 在el-table中自定义排序名字字段可以通过使用自定义排序函数来实现。首先,在el-table-column标签中添加sortable属性,并设置为custom。然后,在该标签中添加一个scoped-slot,命名为sort-method,用于指定排序的规则。 例如,我们要按照名字的长度进行排序,可以这样写: ``` <el-table-column prop="name" label="名字" sortable="custom"> <template slot-scope="scope"> {{scope.row.name}} </template> <template slot="sort-method" slot-scope="scope"> {{scope.$index}} <!-- 自定义排序函数 --> {{scope.store.data.sort((a, b) => a.name.length - b.name.length)}} </template> </el-table-column> ``` 在sort-method slot中,scope参数包含了访问原始数据、排序方法等信息。我们可以使用scope.store.data来访问原始数据,并使用sort方法对数据进行排序。在这个例子中,我们通过获取名字字段的长度来进行排序。 当你在el-table中点击名字的表头时,el-table会调用我们定义的sort-method函数对数据进行排序,然后渲染表格。 希望这个回答能满足你的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值