当前位置:首页 > 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)
    })
  }
}

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

相关文章

网页制作css 列表

网页制作css 列表

创建CSS列表样式 使用CSS可以自定义HTML列表(有序列表<ol>和无序列表<ul>)的外观,包括项目符号、缩进、颜色等。以下是一些常见的列表样式方法: 基础列表样式…

h5实现展开列表

h5实现展开列表

使用HTML5和CSS实现展开列表 在HTML5中,可以通过结合CSS和JavaScript实现展开列表效果。以下是几种常见的方法: 方法1:使用details和summary标签 HTML5提供…

vue实现列表

vue实现列表

实现列表的基本方法 在Vue中实现列表通常使用v-for指令,这是Vue的核心功能之一。v-for可以遍历数组或对象,为每个元素生成对应的DOM节点。 <template> <…

uniapp商品列表

uniapp商品列表

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

vue实现列表循环

vue实现列表循环

列表循环的实现方式 在Vue中实现列表循环主要依赖于v-for指令,该指令基于源数据多次渲染元素或模板块。 基础数组循环 使用v-for遍历数组时,语法为item in items或(item, i…

vue实现列表权限

vue实现列表权限

实现列表权限控制的方法 在Vue中实现列表权限控制通常涉及前端逻辑与后端数据的配合。以下是几种常见方法: 基于角色或权限码的渲染控制 通过v-if或v-show指令根据用户权限动态渲染列表项:…