我想要按照排序优先级文本给出的特定顺序对对象数组进行排序。
var sortPriority = "ramoklyxq";
items[
0:{data: "aizak", level: 'z'}
1:{data: "alice", level: 'r'}
2:{data: "bob", level: 'a'}
3:{data: "trinity", level: 'm'}
4:{data: "ella", level: 'z'}
5:{data: "John", level: 'z'}
6:{data: "bryan", level: 'z'}
7:{data: "sam", level: 'o'}
8:{data: "nick", level: 'k'}
9:{data: "angel", level: 'l'}
10:{data: "arla", level: 'z'}
11:{data: "marley", level: 'o'}
etc
]
i want to return as:
items[
0:{data: "alice", level: 'r'}
1:{data: "bob", level: 'a'}
2:{data: "trinity", level: 'm'}
3:{data: "marley", level: 'o'}
4:{data: "sam", level: 'o'}
5:{data: "nick", level: 'k'}
6:{data: "angel", level: 'l'}
7:{data: "aizak", level: 'z'}
8:{data: "arla", level: 'z'}
9:{data: "bryan", level: 'z'}
10:{data: "ella", level: 'z'}
11:{data: "John", level: 'z'}
etc
]
有没有办法按 data.level 顺序从 sortPriority 级别对列表进行排序。 如果 sortPriority 中不存在级别,则会添加到后面,如返回示例所示。
我首先使用此函数按级别排序,然后再按数据排序。
for (let i = 0; i < items.length; i++) {
var list = document.getElementById('holder');
[...list.children]
.sort((a, b) => a.data.level > b.data.level ? 1 : -1)
.forEach(node => list.appendChild(node));
for (let j = 0; j < items.length; j++) {
var list = document.getElementById('holder');
[...list.children]
.sort((a, b) => a.data.data > b.data.data ? 1 : -1)
.forEach(node => list.appendChild(node));
}
}
我需要类似这个函数的正确结果,这样我就可以将其附加到列表中,如图所示
提前致谢。
您可以获取一个对象作为订单并相应地排序。
const
sortPriority = "ramoklyxq",
data = [{ data: "aizak", level: 'z' }, { data: "alice", level: 'r' }, { data: "bob", level: 'a' }, { data: "trinity", level: 'm' }, { data: "ella", level: 'z' }, { data: "John", level: 'z' }, { data: "bryan", level: 'z' }, { data: "sam", level: 'o' }, { data: "nick", level: 'k' }, { data: "angel", level: 'l' }, { data: "arla", level: 'z' }, { data: "marley", level: 'o' }],
order = Object.fromEntries([...sortPriority].map((c, i) => [c, i + 1]));
data.sort(({ level: a }, { level: b }) => (order[a] || Infinity) - (order[b] || Infinity));
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }