如何对 ES6 “套装”进行排序?

2022-08-30 05:25:51

new Set(['b', 'a', 'c']).sort()抛出。如何对 进行排序以确保特定的迭代顺序?TypeError: set.sort is not a functionSet


答案 1

集合不是有序抽象数据结构。

然而,A 总是具有相同的迭代顺序 - 元素插入顺序 [1],因此当您迭代它(通过迭代方法、调用 或 for.. of 循环)时,您始终可以期望如此。SetSymbol.iterator

您始终可以将该集合转换为数组并对其进行排序。

Array.from(new Set(["b","a","c"])).sort();
[...(new Set(["b","a","c"]))].sort(); // with spread.

[1] forEachCreateSetIterator


答案 2

在某些情况下,最好对集合进行就地“排序”,类似于 ,可以像这样完成:array.sort()

function sortSet(set) {
  const entries = [];
  for (const member of set) {
    entries.push(member);
  }
  set.clear();
  for (const entry of entries.sort()) {
    set.add(entry);
  }
  return set;
};

sortSet(new Set([3,2,1]))
// => Set(3) { 1, 2, 3 }