Как преобразовать Set в Array?
Проблема:
Я использую класс Set
в JavaScript, чтобы создавать массивы с гарантированно уникальными элементами. Однако, я столкнулся с тем, что у Set
нет удобного способа для получения его элементов, кроме генератора Set.values
, который вызывается в довольно неуклюжем формате: mySet.values.next()
.
Это было бы приемлемо, если бы можно было использовать метод map
и аналогичные функции с Set
, но, к сожалению, это невозможно.
Я пробовал применять Array.from
, но он, по-видимому, предназначен только для преобразования объектов, подобных массивам (например, NodeList и TypedArrays), в массив. Еще один вариант — попытка использовать Object.keys
, но он не работает для Set
, и в прототипе Set
нет аналогичного статического метода.
В связи с этим у меня вопрос: существует ли какой-либо удобный встроенный метод для создания массива на основе значений заданного Set
? (Порядок элементов не имеет значения.)
Если такого варианта нет, то, возможно, есть какой-то изящный однострочный способ для этого? Например, с использованием for...of
или чего-то подобного?
4 ответ(ов)
Возможно, я запоздал с ответом, но вы можете сделать следующее:
const set = new Set(['a', 'b']);
const values = set.values();
const array = Array.from(values);
Это должно работать без проблем в браузерах, которые поддерживают ES6, или если у вас есть полифилл, который корректно реализует указанную функциональность.
Правка: Сегодня вы можете просто использовать то, что предлагает @c69:
const set = new Set(['a', 'b']);
const array = [...set]; // или Array.from(set)
В приведённом коде создаётся множество (Set) из массива, а затем с помощью оператора ...
создаётся новый массив из этого множества.
Вот как работает этот код:
- Инициализируется массив
arr
, содержащий числа, включая дубликаты. - С помощью конструкции
new Set(arr)
создаётся множество, которое автоматически удаляет все дубликаты из массиваarr
. - Оператор расширения
...set
используется для создания нового массиваsetarr
, который содержит уникальные элементы из множества. - Наконец, результат выводится в консоль.
Таким образом, вы получаете массив уникальных значений:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Если у вас есть дополнительные вопросы или нужно что-то объяснить подробнее, не стесняйтесь спрашивать!
Использование Set и преобразование его в массив очень похоже на копирование массива...
Вы можете использовать те же методы для копирования массива, что очень удобно в ES6.
Например, вы можете воспользоваться оператором ...
.
Представьте, что у вас есть следующий Set:
const a = new Set(["Alireza", "Dezfoolian", "is", "a", "developer"]);
Вы можете просто преобразовать его, используя:
const b = [...a];
Результат будет:
["Alireza", "Dezfoolian", "is", "a", "developer"]
Теперь у вас есть массив, и вы можете использовать все методы, доступные для массивов...
Другие распространенные способы сделать это:
const b = Array.from(a);
Или использовать циклы, например:
const b = [];
a.forEach(v => b.push(v));
Все эти методы позволят вам легко преобразовать Set в массив и работать с ним так же, как с обычным массивом.
Чтобы удалить дубликаты из массива, отсортировать его и вернуть второй элемент нового массива, вы можете использовать следующий код:
function processData(myArray) {
// Создаем Set для удаления дубликатов
var s = new Set(myArray);
// Преобразуем Set обратно в массив
var arr = [...s];
// Сортируем массив по убыванию и возвращаем 1-й элемент
return arr.sort((a, b) => b - a)[1];
}
console.log(processData([2, 3, 6, 6, 5])); // Вывод 5
Обратите внимание, что в пример кода, который вы привели, была небольшая ошибка в вызове console.log()
, где отсутствовала закрывающая скобка. Также следует учитывать, что метод sort
изменяет порядок элементов в массиве, поэтому мы сначала удаляем дубликаты, а затем сортируем. В результате получаем обновленный массив, из которого можно взять второй элемент после сортировки.
Как перемешать (сделать случайным) массив в JavaScript?
Как объединить два массива в JavaScript и удалить дубликаты?
Как очистить массив в JavaScript?
Преобразование 'ArrayList<String>' в 'String[]' в Java
Выбор последнего элемента в массиве JavaScript