标题列表分组和创建首字母索引是一种常见的数据组织和展示方式,它将一组标题按照其首字母进行分类和分组,便于用户快速浏览和定位内容。这种技术广泛应用于通讯录、目录索引、商品分类等场景。
预先知道所有可能的字母分组,适用于固定内容
根据实际数据动态生成分组,适用于变化内容
结合静态和动态特性,如固定A-Z但只显示有数据的字母
// 示例数据
const titles = [
"Apple", "Banana", "Cherry", "Date", "Fig",
"Grape", "Kiwi", "Lemon", "Mango", "Orange",
"Peach", "Pear", "Quince", "Raspberry", "Strawberry"
];
// 分组函数
function groupByFirstLetter(items) {
return items.reduce((acc, item) => {
const firstLetter = item.charAt(0).toUpperCase();
if (!acc[firstLetter]) {
acc[firstLetter] = [];
}
acc[firstLetter].push(item);
return acc;
}, {});
}
// 使用示例
const groupedTitles = groupByFirstLetter(titles);
console.log(groupedTitles);
// 渲染分组列表
function renderGroupedList(groupedData) {
const container = document.getElementById('list-container');
// 按字母顺序排序分组
const sortedLetters = Object.keys(groupedData).sort();
sortedLetters.forEach(letter => {
// 创建字母标题
const letterHeader = document.createElement('h2');
letterHeader.textContent = letter;
container.appendChild(letterHeader);
// 创建项目列表
const list = document.createElement('ul');
groupedData[letter].forEach(item => {
const listItem = document.createElement('li');
listItem.textContent = item;
list.appendChild(listItem);
});
container.appendChild(list);
});
}
// 调用渲染函数
renderGroupedList(groupedTitles);
/* 基础样式 */
#list-container {
font-family: Arial, sans-serif;
max-width: 600px;
margin: 0 auto;
}
#list-container h2 {
background-color: #f0f0f0;
padding: 8px 12px;
margin: 10px 0 5px 0;
border-radius: 4px;
}
#list-container ul {
list-style-type: none;
padding: 0;
margin: 0 0 20px 0;
}
#list-container li {
padding: 8px 12px;
border-bottom: 1px solid #eee;
}
#list-container li:last-child {
border-bottom: none;
}
解决方案:
function getGroupKey(title) {
const firstChar = title.charAt(0).toUpperCase();
return /[A-Z]/.test(firstChar) ? firstChar : '#';
}
解决方案:
解决方案:
function getGroupKey(title, locale = 'en') {
const firstChar = title.charAt(0).toLocaleUpperCase(locale);
return /[\p{L}]/u.test(firstChar) ? firstChar : '#';
}
解决方案:
// 添加字母索引导航
function addAlphabetIndex(groupedData) {
const letters = Object.keys(groupedData).sort();
const indexContainer = document.createElement('div');
indexContainer.className = 'alphabet-index';
letters.forEach(letter => {
const link = document.createElement('a');
link.href = `#${letter}`;
link.textContent = letter;
indexContainer.appendChild(link);
});
document.body.insertBefore(indexContainer, document.getElementById('list-container'));
}
这种分组和索引技术能显著提升大量数据的可浏览性和用户体验,是前端开发中常见且实用的功能。
没有搜到相关的文章