我怎样才能对ES6`Set`进行排序?

时间:2015-10-12 20:30:58

标签: javascript arrays sorting set ecmascript-6

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

3 个答案:

答案 0 :(得分:83)

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

但是Set总是具有相同的迭代顺序 - 元素插入顺序[1],所以当你迭代它时(通过迭代方法,通过调用Symbol.iterator或者通过for ...来你可以随时期待。

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

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

[1] forEachCreateSetIterator

答案 1 :(得分:1)

最简单的方法。

console.log(new Set(['b', 'a', 'c'].sort()))
//Set(3) {"a", "b", "c"}

答案 2 :(得分:0)

在某些情况下,可能更喜欢就地“排序”集合,类似于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 }