要在 JavaScript 中对集合进行排序,请执行以下操作:
- 使用
Array.from()
方法将 Set 转换为数组。 - 使用
Array.sort()
方法对数组进行排序。 - 将数组转换回 Set 对象。
// ✅ 对包含字符串的集合进行排序 const set1 = new Set(['c', 'b', 'a']); const sortedArray = Array.from(set1).sort(); console.log(sortedArray); // ['a', 'b', 'c'] const sortedSet = new Set(sortedArray); console.log(sortedSet); // {'a', 'b', 'c'}
如果需要对包含数字的 Set 进行排序,则必须将函数传递给Array.sort()
方法。
// ✅ 对包含数字的集合进行排序 const set1 = new Set([300, 100, 700]); // 按升序对数字进行排序 const sortedArray = Array.from(set1).sort((a, b) => a - b); console.log(sortedArray); // [100, 300, 700] const sortedSet = new Set(sortedArray); console.log(sortedSet); // {100, 300, 700}
我们使用Array.from()
方法将 Set 对象转换为数组,因此我们可以对数组调用Array.sort()
方法。
注意,在对数字进行排序时,我们必须将一个函数作为参数传递给sort()
方法,而对于字符串,则不这样做。
我们传递给sort()
方法的参数是一个定义排序顺序的函数。
如果不提供参数,数组元素将转换为字符串,并根据其 UTF-816 代码单位值进行排序。
这不是我们在处理包含数字的 Set 对象时想要的,但是,这正是我们在比较字符串时想要的。
对数组进行排序后,我们将其传递给Set()
构造函数,以将其转换回 Set。
如果必须经常这样做,请定义可重用的函数。
function sortStringSet(set) { const sortedArray = Array.from(set).sort(); const sortedSet = new Set(sortedArray); return sortedSet; } // Set(3) { 'a', 'b', 'c' } console.log(sortStringSet(new Set(['c', 'b', 'a']))); // Set(3) { 'a', 'c', 'z' } console.log(sortStringSet(new Set(['c', 'z', 'a'])));
sortStringSe()
函数将包含字符串的 Set 作为参数,并对 Set 进行排序。
我们还可以定义一个 sortNumbersSet()函数。
function sortNumbersSet(set) { const sortedArray = Array.from(set).sort((a, b) => a - b); const sortedSet = new Set(sortedArray); return sortedSet; } // Set(3) { 100, 300, 700 } console.log(sortNumbersSet(new Set([700, 100, 300]))); // Set(3) { 100, 500, 600 } console.log(sortNumbersSet(new Set([500, 600, 100])));
该函数将数字 Set 作为参数,并对 Set 进行排序。
使用…运算符对集合进行排序
或者,可以使用(…)运算符将集合转换为数组。
// ✅ 对包含字符串的 Set 对象进行排序 const set1 = new Set(['c', 'b', 'a']); const sortedArray = [...set1].sort(); console.log(sortedArray); // [ 'a', 'b', 'c' ] const sortedSet = new Set(sortedArray); console.log(sortedSet); // {'a', 'b', 'c'}
如果 Set 对象包含数字,请将函数传递给Array.sort()
方法。
const numbersSet = new Set([300, 100, 700]); const sortedNumbers = [...numbersSet].sort((a, b) => a - b); console.log(sortedNumbers); // [100, 300, 700] const sortedNumbersSet = new Set(sortedNumbers); console.log(sortedNumbersSet); // {100, 300, 700}
代码示例实现了与使用Array.from()
方法的代码示例相同的结果。
(…)运算符只是将 Set 的元素解构到一个数组中。