javascript - 根据值(姓名和姓氏)对 JavaScript 中的 2 个不同元素列表进行排序
问题描述
我需要一些帮助。我有一个多维数组,其中包含一个长度为 2 ["name","surname"] 的子数组,它们都是第一个字母大写的字符串值。
请求是在窗口加载时显示数组的前 10 个元素。之后,我使用一个按钮,每次按下时加载 10 个以上的元素。此功能完美无缺。
我面临 2 个问题:-我有 2 个按钮,按姓名排序和按姓氏排序。你猜对了。如果按下“按名称排序”btn,则必须按名称对元素进行排序,如果按下“按姓氏排序”则相反。
以下功能运行良好。排序姓名和姓氏。问题是在对姓名进行排序时,姓氏应该跟随姓名到正确的位置。现在我可以对姓名和姓氏进行排序,结果是排序后有其他全名。
-第二个问题,如果我们修复第一个问题,如果我加载 10 个或更多元素(通过按“加载更多”btn),我将需要按 sort btn 对它们进行排序。我想我应该对初始数组进行排序,然后开始从排序列表中取出项目。但是如何使用 ["Name","Surname"] 的子数组对数组进行排序?先感谢您
function sortByName(e) {
e.preventDefault();
let itemList = document.getElementById('item-list-two').children;
let names = [];
const itemListArray = Array.from(itemList);
for (let i = 0; i < itemListArray.length; i++) {
names.push(itemListArray[i].innerText.toUpperCase());
names.sort();
}
for (let i = 0; i < itemList.length; i++) {
itemList[i].textContent = names[i].charAt(0) + names[i].slice(1).toLowerCase();
}
}
function sortBySurname(e) {
e.preventDefault();
let itemList = document.getElementById('item-list-three').children;
let surnames = [];
const itemListArray = Array.from(itemList);
for (let i = 0; i < itemListArray.length; i++) {
surnames.push(itemListArray[i].innerText.toUpperCase());
surnames.sort();
}
for (let i = 0; i < itemList.length; i++) {
itemList[i].textContent = surnames[i].charAt(0) + surnames[i].slice(1).toLowerCase();
}
}
解决方案
这是一个简单的示例 - 正如您所看到的,当对姓名进行排序时,姓氏会跟随姓名到正确的位置。要对多维数组进行排序,例如["Name","Surname"]
您只需要一个比较函数来检查位置 1 处元素的值并根据该值进行排序。例如
const names = [
["Alice", "Smith"],
["Bob", "Jones"],
["Eve", "Chatz"],
["Alice", "Fynn"],
["Alison", "Marks"]
];
const $ = (id) => document.getElementById(id);
function compareSurname(a, b) {
if (a[1] < b[1]) {
return -1;
}
if (a[1] > b[1]) {
return 1;
}
return 0;
}
function log(m) {
$("log").innerHTML = "";
m.forEach(x => $("log").innerHTML += `${x}\n`)
}
$("name").addEventListener("click", () => log(names.sort()));
$("surname").addEventListener("click", () => log(names.sort(compareSurname)));
window.addEventListener('DOMContentLoaded', () => log(names));
<button type=button id=name>Name</button>
<button type=button id=surname>Surname</button>
<pre id=log></pre>
要在加载新数据的部分提供一些帮助,需要更多信息!
推荐阅读
- python - 无法在 python 3.6 中将 str 转换为浮点数
- android - SDK 22 是否支持 BottomNavigationView?
- python - 当省略字符串中的任何非数字字符时,为什么这些字母会保留?
- javascript - React JS:元素引用被指定为字符串(内部)但没有设置所有者
- javascript - javascript的无用机制?
- mysql - 如何在 MySQL 中获得带有 mah 操作的列?
- android - v1 和 v2 签名不可勾选
- tsql - 根据用户输入检索/显示列
- node.js - 在 nodejs 中为 server.listen() 重新使用相同的端口
- linux - 在 Apache 中手动创建 301 重定向,以将站点的所有 IP 请求重定向到正确的域名