Set кажется хорошим способом создания массивов с гарантированно уникальными элементами, но он не предоставляет никакого хорошего способа получения свойств, за исключением генератора [Set] .values, который вызывается неудобным образом mySet.values.next()
.
Это было бы хорошо, если бы вы могли вызывать map
и подобные функции на множествах. Но вы также не можете этого сделать.
Я пытался Array.from
, но, похоже, конвертирует только массивы (NodeList и TypedArrays?) Объектов в массив. Еще одна попытка: Object.keys
не работает для Sets, а Set.prototype не имеет аналогичного статического метода.
Итак, вопрос: есть ли удобный встроенный метод для создания массива со значениями данного набора? (Порядок элементов не имеет большого значения).
если такой опции не существует, то, возможно, есть хорошая идиоматическая строчка для этого? как, используя for...of
, или подобное?
var array = [v for (v of mySet)];
не работает в chrome 46[...mySet]
.Array.from(mySet);
[...mySet]
есть проблемы при компиляции с использованием Typescript (см. Эту проблему ), поэтому, вероятно, безопаснее использовать,Array.from(mySet)
если вы собираетесь конвертировать в Typescript в ближайшем будущем.через https://speakerdeck.com/anguscroll/es6-uncensored Ангусом Кроллом
Оказывается, мы можем использовать
spread
оператор:Или, альтернативно, используйте
Array.from
:источник
Array.from
и...
Array.from
. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…chrome://flags/#enable-javascript-harmony
Помните, что это экспериментально, не думайте, что это хорошее решение для разработки.Предполагая, что вы просто
Set
временно используете уникальные значения в массиве, а затем конвертируете обратно в массив, попробуйте использовать это:Это зависит от использования подчеркивания или черточки .
источник
Возможно, чтобы опоздать на вечеринку, но вы могли бы просто сделать следующее:
Это должно работать без проблем в браузерах, которые поддерживают ES6, или если у вас есть прокладка, которая правильно заполняет вышеуказанные функции.
Изменить : Сегодня вы можете просто использовать то, что предлагает @ c69:
источник
set.entries()
вы получите массив пар. Вы можете использовать,set.values()
чтобы получить простой массив.var array = Array.from(set);
.entries
, ни.values
. Как упомянуто выше @Buffalo -Array.from(set)
достаточно.Array.from()
не получилось, как ожидалось. Но теперь выкладываю иArray.from()
оба работают просто отлично.Используйте спред оператора, чтобы получить желаемый результат
источник
В моем случае решение было:
значение1 равно значению2 => Значение, содержащееся в текущей позиции в наборе. Для обоих аргументов передается одинаковое значение
Работал под IE11.
источник
Использование Set и преобразование его в массив очень похоже на копирование массива ...
Таким образом, вы можете использовать те же методы для копирования массива, что очень легко в ES6
Например, вы можете использовать
...
Представьте, что у вас есть этот сет ниже:
Вы можете просто конвертировать его используя:
и результат:
Массив и теперь вы можете использовать все методы, которые вы можете использовать для массива ...
Другие распространенные способы сделать это:
или используя такие циклы:
источник
Код ниже создает набор из массива и затем, используя
...
оператор.источник
Вот простой способ получить только уникальные необработанные значения из массива. Если вы преобразуете массив в Set и после этого выполните преобразование из Set в массив. Это преобразование работает только для необработанных значений, для объектов в массиве оно недопустимо. Попробуйте сами.
источник
ПРОСТО ОТВЕТ
просто разложите набор внутри []
Результат : [1,5]
источник