在我的项目上下文中对字符进行不同估值的字符排序
Sorting Characters Where The Characters are Valued Differently In My Project Context
我想对由字母 F、S、T 组成的字符数组进行排序。每个字符可能有重复项。
示例输入数组:
['F', 'F', 'S', 'T', 'T']
['F', 'S']
['T', 'S', 'S', 'F']
在我的项目中,T = 0,F = 1,S = 2,所以当数组排序时,如果T在数组中,它应该是第一个索引。 F应该是第二个索引,S应该是第三个索引。有什么办法可以实现吗?
定义一种得分方式,然后在自定义 Array.prototype.sort
函数中使用它。
使用 Array.prototype.slice(0)
因为 .sort
改变了原始数组。
const score = {
"T": 0,
"F": 1,
"S": 2,
}
const tests = [
['F', 'F', 'S', 'T', 'T'],
['F', 'S'],
['T', 'S', 'S', 'F']
];
for (const test of tests) {
const sorted = test.slice(0).sort((a, b) => score[a] - score[b]);
console.log(sorted);
}
按您想要的顺序创建一个简单的字母数组。使用 ...
rest 运算符接受无限数量的参数:
const key = ['T', 'F', 'S'];
const sortByKeyIndex = (ki, ...arr) => {// ([key], ...[A], [B], [C])
合并来自 ...
rest 运算符的数组——它生成一个数组数组,然后 运行 .map()
[...arr].map(a => //...[[A], [B], [C]]
接下来,.sort()
每个 sub-array 将每个字母与 ki
(key
) 的索引与 .findIndex()
:
进行比较
a.sort((x, y) => ki.findIndex(k => x === k) - ki.findIndex(k => y === k)));
const key = ['T', 'F', 'S'];
let A = ['F', 'F', 'S', 'T', 'T'],
B = ['F', 'S'],
C = ['T', 'S', 'S', 'F'];
const sortByKeyIndex = (ki, ...arr) => {
return [...arr].map(a => a.sort((x, y) => ki.findIndex(k => x === k) - ki.findIndex(k => y === k)));
}
console.log(sortByKeyIndex(key, A, B, C));
我想对由字母 F、S、T 组成的字符数组进行排序。每个字符可能有重复项。
示例输入数组:
['F', 'F', 'S', 'T', 'T']
['F', 'S']
['T', 'S', 'S', 'F']
在我的项目中,T = 0,F = 1,S = 2,所以当数组排序时,如果T在数组中,它应该是第一个索引。 F应该是第二个索引,S应该是第三个索引。有什么办法可以实现吗?
定义一种得分方式,然后在自定义 Array.prototype.sort
函数中使用它。
Array.prototype.slice(0)
因为 .sort
改变了原始数组。
const score = {
"T": 0,
"F": 1,
"S": 2,
}
const tests = [
['F', 'F', 'S', 'T', 'T'],
['F', 'S'],
['T', 'S', 'S', 'F']
];
for (const test of tests) {
const sorted = test.slice(0).sort((a, b) => score[a] - score[b]);
console.log(sorted);
}
按您想要的顺序创建一个简单的字母数组。使用 ...
rest 运算符接受无限数量的参数:
const key = ['T', 'F', 'S'];
const sortByKeyIndex = (ki, ...arr) => {// ([key], ...[A], [B], [C])
合并来自 ...
rest 运算符的数组——它生成一个数组数组,然后 运行 .map()
[...arr].map(a => //...[[A], [B], [C]]
接下来,.sort()
每个 sub-array 将每个字母与 ki
(key
) 的索引与 .findIndex()
:
a.sort((x, y) => ki.findIndex(k => x === k) - ki.findIndex(k => y === k)));
const key = ['T', 'F', 'S'];
let A = ['F', 'F', 'S', 'T', 'T'],
B = ['F', 'S'],
C = ['T', 'S', 'S', 'F'];
const sortByKeyIndex = (ki, ...arr) => {
return [...arr].map(a => a.sort((x, y) => ki.findIndex(k => x === k) - ki.findIndex(k => y === k)));
}
console.log(sortByKeyIndex(key, A, B, C));