按数组中第一个元素排序

时间:2018-07-16 06:23:05

标签: javascript arrays sorting

我想得到一个答案['H','H','A',A] 从输入['H','A','H','A']

如何根据最先出现的字符对其进行排序?

1 个答案:

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