当前位置:首页 > 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的状态管理(如Vuex或Pinia)存储当前城市数据,结合下拉菜单或选项卡组件实现城市切换功能。切换时更新状态并触发相关数据重新加载。 核心代码实现 1. 状态管理(以Pinia…

vue列表查询实现

vue列表查询实现

实现Vue列表查询功能 基本数据绑定与渲染 在Vue中实现列表查询,首先需要定义数据源和查询条件。通过v-model绑定搜索输入框,使用计算属性过滤列表。 <template> &l…

vue实现搜索列表

vue实现搜索列表

Vue 实现搜索列表功能 在 Vue 中实现搜索列表功能通常需要以下几个关键步骤: 数据绑定与列表渲染 使用 v-model 绑定搜索输入框,监听用户输入。通过 v-for 指令渲染过滤后的列表数据…

vue实现传输列表

vue实现传输列表

Vue 实现传输列表 在 Vue 中实现传输列表功能,通常涉及两个列表之间的数据传递,用户可以通过按钮或拖拽操作将项目从一个列表移动到另一个列表。以下是实现传输列表的几种方法。 使用组件间数据传递…

vue实现信息列表

vue实现信息列表

Vue 实现信息列表的方法 使用 v-for 渲染列表 通过 Vue 的 v-for 指令可以轻松渲染动态列表数据。在模板中使用 v-for 遍历数组,并为每个项生成对应的 DOM 元素。 <…

vue 实现列表更换

vue 实现列表更换

实现列表更换的方法 在Vue中实现列表更换通常涉及数据绑定和响应式更新。以下是几种常见的方法: 使用v-for指令绑定数组 通过修改数据源数组实现列表内容的动态更换。Vue的响应式系统会自动更新DO…