国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于uniapp與uview做一個按拼音首字母排序的通訊錄頁面

這篇具有很好參考價值的文章主要介紹了基于uniapp與uview做一個按拼音首字母排序的通訊錄頁面。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

效果圖:

基于uniapp與uview做一個按拼音首字母排序的通訊錄頁面,uniapp分享,uni-app

第一步導(dǎo)入pinyin庫并應(yīng)用,用于區(qū)分漢字的拼音首字母

npm i pinyin
import pinyin from "pinyin"

完整算法:

function getListByPinyinFirstLetter(data) {
		const newList = {};
		for (const item of data) {
			let firstLetter;
			if (/[a-zA-Z]/.test(item.name.charAt(0))) {
				// 如果是英文字母開頭的直接使用大寫首字母
				firstLetter = item.name.charAt(0).toUpperCase();
			} else {
				const pinyinArray = pinyin(item.name, {
					style: pinyin.STYLE_FIRST_LETTER, // 提取拼音首字母
				});
				if (pinyinArray.length > 0) {
					firstLetter = /[a-zA-Z]/.test(pinyinArray[0][0].toUpperCase()) ? pinyinArray[0][0].toUpperCase() :
						"#"; // 獲取拼音首字母并轉(zhuǎn)換為大寫
				} else {
					// 如果沒有拼音首字母,則歸類為#
					firstLetter = "#";
				}
			}

			if (!newList[firstLetter]) {
				newList[firstLetter] = [];
			}
			newList[firstLetter].push(item);
		}
		// 將鍵按字母順序排序
		const sortedKeys = Object.keys(newList).sort((a, b) => {
			if (a === '#') return 1;
			if (b === '#') return -1;
			return a.localeCompare(b);
		});

		const sortedNewList = {};
		for (const key of sortedKeys) {
			sortedNewList[key] = newList[key];
		}
		console.log(sortedNewList, sortedKeys);
		indexList.value = sortedKeys
		list.value = sortedNewList;
	}

完整代碼(樣式自己定義):文章來源地址http://www.zghlxwxcb.cn/news/detail-738851.html

<template>
	{{newList}}
	<u-index-list :scrollTop="scrollTop" v-if="indexList.length">
		<view v-for="(item, index) in indexList" :key="index">
			<u-index-anchor :index="item" />
			<view class="list-cell" v-for="(item,index) in list[item]">
				{{item.name}}
			</view>
		</view>
	</u-index-list>
</template>

<script setup>
	import {
		ref,
	} from "vue";
	import pinyin from "pinyin"
	import {
		onLoad,
		onPageScroll
	} from "@dcloudio/uni-app"
	onLoad(() => {
		getListByPinyinFirstLetter(testList.value)
	})

	const indexList = ref([])
	const testList = ref([{
			name: "張三"
		},
		{
			name: "張學(xué)友"
		},
		{
			name: "asasd"
		},
		{
			name: "大師"
		},
		{
			name: "(字符"
		},
	])
	const list = ref([])

	function getListByPinyinFirstLetter(data) {
		const newList = {};
		for (const item of data) {
			let firstLetter;
			if (/[a-zA-Z]/.test(item.name.charAt(0))) {
				// 如果是英文字母開頭的直接使用大寫首字母
				firstLetter = item.name.charAt(0).toUpperCase();
			} else {
				const pinyinArray = pinyin(item.name, {
					style: pinyin.STYLE_FIRST_LETTER, // 提取拼音首字母
				});
				if (pinyinArray.length > 0) {
					firstLetter = /[a-zA-Z]/.test(pinyinArray[0][0].toUpperCase()) ? pinyinArray[0][0].toUpperCase() :
						"#"; // 獲取拼音首字母并轉(zhuǎn)換為大寫
				} else {
					// 如果沒有拼音首字母,則歸類為#
					firstLetter = "#";
				}
			}

			if (!newList[firstLetter]) {
				newList[firstLetter] = [];
			}
			newList[firstLetter].push(item);
		}
		// 將鍵按字母順序排序
		const sortedKeys = Object.keys(newList).sort((a, b) => {
			if (a === '#') return 1;
			if (b === '#') return -1;
			return a.localeCompare(b);
		});

		const sortedNewList = {};
		for (const key of sortedKeys) {
			sortedNewList[key] = newList[key];
		}
		console.log(sortedNewList, sortedKeys);
		indexList.value = sortedKeys
		list.value = sortedNewList;
	}
	onPageScroll(e => {
		this.scrollTop = e.scrollTop;
	})
</script>

<style lang="scss" scoped>
	.list-cell {
		display: flex;
		box-sizing: border-box;
		width: 100%;
		padding: 10px 24rpx;
		overflow: hidden;
		color: #323233;
		font-size: 14px;
		line-height: 24px;
		background-color: #fff;
	}
</style>

到了這里,關(guān)于基于uniapp與uview做一個按拼音首字母排序的通訊錄頁面的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C語言---認(rèn)識動態(tài)內(nèi)存管理并實(shí)現(xiàn)一個動態(tài)通訊錄:靜態(tài)通訊錄別來沾邊

    C語言---認(rèn)識動態(tài)內(nèi)存管理并實(shí)現(xiàn)一個動態(tài)通訊錄:靜態(tài)通訊錄別來沾邊

    ??個人主頁:@小沈熬夜禿頭中???? ??小編介紹:歡迎來到我的亂七八糟小星球?? ??專欄:C語言學(xué)習(xí) ??本章內(nèi)容:動態(tài)內(nèi)存管理 送給各位??:當(dāng)你的能力還駕馭不了你的目標(biāo)時那你就應(yīng)該沉下心來歷練 記得 評論?? +點(diǎn)贊?? +收藏?? +關(guān)注??哦~ 提示:以下是本篇

    2024年02月08日
    瀏覽(171)
  • 用python做一個通訊錄系統(tǒng)

    用python做一個通訊錄系統(tǒng)

    用python的easygui模塊做一個簡易通訊錄的系統(tǒng) 它一共有3個功能: ? ? ? ? 1. 添加聯(lián)系人 ? ? ? ? 2. 查找聯(lián)系人 ? ? ? ? 3. 刪除聯(lián)系人 先看一下主界面: 下面是寫入聯(lián)系人的界面:? 下面是查詢聯(lián)系人的界面: 它可以通過聯(lián)系人姓氏開頭的拼音查找、姓名開頭查找、手機(jī)號碼查找

    2024年02月08日
    瀏覽(90)
  • 基于Android的手機(jī)通訊錄設(shè)計

    基于Android的手機(jī)通訊錄設(shè)計

    目 錄 1.系統(tǒng)描述 1 1.1 問題描述 1 1.2 功能描述 1 1.3 數(shù)據(jù)需求 2 1.4 設(shè)計意義 2 2.背景介紹 2 2.1 Android系統(tǒng)概述 2 2.2 Android開發(fā)組件 4 2.2.1 Activity組件 4 2.2.2 Service 組件 7 2.2.3 BroadcastReceiver 組件 8 2.2.4 Content Provider 組件 8 2.3 Android數(shù)據(jù)庫 9 2.3.1 SQLite數(shù)據(jù)庫 9 2.3.2 SQLite數(shù)據(jù)庫特點(diǎn) 10

    2024年02月09日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu)——基于順序表實(shí)現(xiàn)通訊錄

    數(shù)據(jù)結(jié)構(gòu)——基于順序表實(shí)現(xiàn)通訊錄

    1)?少能夠存儲100個?的通訊信息 2)能夠保存??信息:名字、性別、年齡、電話、地址等 3)增加聯(lián)系?信息 4)刪除指定聯(lián)系? 5)查找制定聯(lián)系? 6)修改指定聯(lián)系? 7)顯?聯(lián)系?信息 我們之前創(chuàng)建的順序表可以實(shí)現(xiàn)連續(xù)存儲數(shù)據(jù)(類型可以為整型、字符等),但無

    2024年02月05日
    瀏覽(20)
  • 【(數(shù)據(jù)結(jié)構(gòu))—— 基于單鏈表實(shí)現(xiàn)通訊錄】

    【(數(shù)據(jù)結(jié)構(gòu))—— 基于單鏈表實(shí)現(xiàn)通訊錄】

    (1). 知識要求 C語言基礎(chǔ)要求:結(jié)構(gòu)體、動態(tài)內(nèi)存管理、單鏈表、文件件操作 (2). 功能要求 1)至少能夠存儲100個人的通訊信息 2)能夠保存用戶信息:名字、性別、年齡、電話、地址等 3)增加聯(lián)系人信息 4)刪除指定聯(lián)系人 5)查找制定聯(lián)系人 6)修改指定聯(lián)系人 7)顯示聯(lián)系

    2024年02月08日
    瀏覽(84)
  • 【C語言】——動態(tài)內(nèi)存管理與文件操作,后面加一個通訊錄福利,萬字解讀,看完你會有一個全新認(rèn)識

    【C語言】——動態(tài)內(nèi)存管理與文件操作,后面加一個通訊錄福利,萬字解讀,看完你會有一個全新認(rèn)識

    目錄 一.動態(tài)內(nèi)存管理 1.為什么有動態(tài)內(nèi)存管理 2.malloc和free ?2.calloc和realloc 3.柔性數(shù)組 二.文件操作 1.為什么使用文件 ?2.二進(jìn)制文件和文本文件 ?3.文件的打開和關(guān)閉 4.文件的順序讀寫 5.文件緩沖區(qū) 三.通訊錄 ?1.預(yù)處理 ?2.基本框架 3.初始化函數(shù) 4.增加聯(lián)系人 ?5.顯示聯(lián)系人

    2024年03月13日
    瀏覽(21)
  • C++基于MFC的通訊錄系統(tǒng)(鏈表)

    C++基于MFC的通訊錄系統(tǒng)(鏈表)

    深入理解面向?qū)ο蠹夹g(shù)的封裝性、繼承性和多態(tài)性,掌握面向?qū)ο蟪绦蛟O(shè)計方法。 綜合應(yīng)用C++基礎(chǔ)知識實(shí)現(xiàn)小型應(yīng)用程序開發(fā)。 掌握使用C++流類庫實(shí)現(xiàn)數(shù)據(jù)文件訪問的操作方法。 熟悉基于對話框的MFC應(yīng)用程序創(chuàng)建過程,掌握ClassWizard工具和常 windows 11, visual studio 2022 設(shè)計一個

    2024年01月25日
    瀏覽(86)
  • 如何基于釘釘通訊錄生成LDAP服務(wù)

    如何基于釘釘通訊錄生成LDAP服務(wù)

    這是一個很有意思的需求,即 通過基于釘釘通訊錄搭建LDAP服務(wù), 場景非常的典型,用戶已經(jīng)有了釘釘?shù)慕M織架構(gòu)來管理員工身份,那么如何利用當(dāng)前的釘釘組織架構(gòu)和用戶身份,生成對外的LDAP服務(wù)呢? 為何要生成LDAP服務(wù)? 因?yàn)?,企業(yè)內(nèi)有不少應(yīng)用的登錄和賬號管理,可以

    2023年04月09日
    瀏覽(101)
  • 基于單鏈表的通訊錄C語言實(shí)現(xiàn)

    ?關(guān)于單鏈表的詳細(xì)了解請見博主的另一篇博客,本文旨在對單鏈表進(jìn)行應(yīng)用,采用C語言編寫。

    2024年04月15日
    瀏覽(104)
  • 網(wǎng)絡(luò)編程——基于TCP協(xié)議的通訊錄【課程設(shè)計】

    網(wǎng)絡(luò)編程——基于TCP協(xié)議的通訊錄【課程設(shè)計】

    題目:基于TCP協(xié)議的通訊錄 設(shè)計目標(biāo): (1)了解Socket通信的原理,在此基礎(chǔ)上編寫一個基于TCP協(xié)議的通訊錄; (2)理解TCP通信原理; 課程設(shè)計系統(tǒng)組成及模塊功能: 此TCP/IP課程設(shè)計實(shí)現(xiàn)了基于TCP的客戶/服務(wù)器通信程序,需要實(shí)現(xiàn)以下一些基本功能: (1)客戶端連接服務(wù)

    2024年02月06日
    瀏覽(64)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包