在我的项目上下文中对字符进行不同估值的字符排序

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));