当前位置:首页 > VUE

vue实现城市列表排序

2026-01-20 00:05:55VUE

Vue 实现城市列表排序

数据准备

确保城市数据以数组形式存储,每个城市对象包含名称或其他排序依据的字段。例如:

data() {
  return {
    cities: [
      { name: '北京' },
      { name: '上海' },
      { name: '广州' },
      { name: '深圳' }
    ]
  }
}

按字母排序

使用 JavaScript 的 sort() 方法结合 localeCompare 实现中文字符排序:

methods: {
  sortCities() {
    this.cities.sort((a, b) => a.name.localeCompare(b.name, 'zh-Hans-CN'))
  }
}

分组排序(热门城市优先)

通过添加分组标识实现分组排序逻辑:

vue实现城市列表排序

data() {
  return {
    cities: [
      { name: '北京', group: 'hot' },
      { name: '上海', group: 'hot' },
      { name: '广州', group: 'A' },
      { name: '深圳', group: 'B' }
    ]
  }
}
methods: {
  sortCities() {
    this.cities.sort((a, b) => {
      if (a.group === 'hot') return -1
      if (b.group === 'hot') return 1
      return a.name.localeCompare(b.name, 'zh-Hans-CN')
    })
  }
}

使用计算属性

通过计算属性实现实时排序效果:

computed: {
  sortedCities() {
    return [...this.cities].sort((a, b) => 
      a.name.localeCompare(b.name, 'zh-Hans-CN')
    )
  }
}

添加索引栏

结合 DOM 操作实现右侧字母索引栏交互:

vue实现城市列表排序

<template>
  <div class="index-bar">
    <span 
      v-for="char in indexChars" 
      @click="scrollTo(char)"
    >{{ char }}</span>
  </div>
</template>

<script>
export default {
  methods: {
    scrollTo(char) {
      const el = document.getElementById(`group-${char}`)
      el?.scrollIntoView()
    }
  }
}
</script>

性能优化

对于大数据量场景,可采用虚拟滚动技术:

<template>
  <RecycleScroller
    :items="sortedCities"
    :item-size="50"
    key-field="id"
  >
    <template v-slot="{ item }">
      <div>{{ item.name }}</div>
    </template>
  </RecycleScroller>
</template>

完整示例

结合拼音库实现更准确的中文排序:

import pinyin from 'pinyin'

methods: {
  sortCities() {
    this.cities.sort((a, b) => {
      const aPy = pinyin(a.name, { style: pinyin.STYLE_NORMAL }).join('')
      const bPy = pinyin(b.name, { style: pinyin.STYLE_NORMAL }).join('')
      return aPy.localeCompare(bPy)
    })
  }
}

标签: 城市列表
分享给朋友:

相关文章

vue实现列表循环

vue实现列表循环

Vue 列表循环的实现方法 在 Vue 中,可以通过 v-for 指令实现列表循环渲染。以下是几种常见的实现方式: 基础列表渲染 <template> <ul>…

vue实现切换城市

vue实现切换城市

实现思路 通过Vue的状态管理(如Vuex或Pinia)存储当前城市数据,结合下拉菜单或选项卡组件实现城市切换功能。切换时更新状态并触发相关数据重新加载。 核心代码实现 1. 状态管理(以Pinia…

vue实现列表权限

vue实现列表权限

实现列表权限的基本思路 在Vue中实现列表权限通常涉及根据用户角色或权限动态渲染列表内容。核心逻辑是通过权限判断控制列表项的显示、隐藏或操作权限。 权限数据管理 使用Vuex或Pinia存储全局权…

vue实现列表水印

vue实现列表水印

实现列表水印的方法 在Vue中为列表添加水印可以通过多种方式实现,以下是几种常见的方法: 使用CSS背景图 通过CSS的background-image属性为列表元素添加水印背景。水印可以是文字或图…

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 无限滚动列表通常用于展示大量数据,通过动态加载数据减少初始渲染压力。以下是基于Vue的实现方法: 使用Intersection Observer API监听滚动 Inter…

uniapp商品列表

uniapp商品列表

商品列表实现方法 在uniapp中实现商品列表功能,可以通过多种方式完成,以下是几种常见的方法: 使用scroll-view组件实现滚动列表 <scroll-view scroll-y="t…