当前位置:首页 > 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 实现长列表的优化方法 使用虚拟滚动技术,只渲染可视区域内的元素,大幅减少DOM节点数量。通过计算滚动位置动态更新显示内容,降低内存占用和渲染压力。 <template> &l…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

vue实现列表组件

vue实现列表组件

Vue 列表组件实现方法 基础列表渲染 使用 v-for 指令渲染数组数据,需配合 :key 提升性能: <template> <ul> <li v-for…

vue实现列表页面

vue实现列表页面

Vue 列表页面实现方案 基础列表渲染 使用 v-for 指令渲染数组数据,配合 :key 提升性能: <template> <ul> <li v-for=…

vue实现多选列表

vue实现多选列表

Vue 实现多选列表的方法 使用 v-model 绑定数组 在 Vue 中,可以利用 v-model 指令绑定一个数组来实现多选功能。当用户选择多个选项时,选中的值会自动添加到数组中。 <te…

vue实现横向列表

vue实现横向列表

实现横向列表的方法 在Vue中实现横向列表可以通过CSS样式控制列表项的排列方式。横向列表通常用于导航菜单、图片展示等场景。 使用flex布局实现 flex布局是实现横向列表最简单的方法之一,通过设…