我想得到一个答案['H','H','A',A]
从输入['H','A','H','A']
如何根据最先出现的字符对其进行排序?
答案 0 :(得分:0)
您可以通过将带有哈希表的临时对象用于同一组计数器来使用sorting with map。
排序是在组中进行的。
结果与已排序临时数组的索引映射。
var array = ['H', 'A', 'H', 'A'],
groups = Object.create(null),
counter = 0,
result = array
.map((v, index) => ({ index, group: groups[v] = groups[v] || ++counter }))
.sort((a, b) => a.group - b.group)
.map(o => array[o.index]);
console.log(result);
相同,但是第一次出现的顺序为Map
。
var array = ['H', 'A', 'H', 'A'],
map = new Map;
array.forEach(v => map.has(v) || map.set(v, map.size + 1));
array.sort((a, b) => map.get(a) - map.get(b));
console.log(array);