Объединение наборов с функциями генератора mergeSets - PullRequest
0 голосов
/ 30 августа 2018

В этой теме: Простейший способ объединения карт / наборов ES6?

Я нашел хороший способ объединить Set или Map

let set3 = new Set(function*() { yield* set1; yield* set2; }());

Я хотел бы создать функцию, которая может объединять любое количество множеств следующим образом:

function  mergeSets() { 
    return new Set(function*() {
        for (const set of arguments) {
            yield* set
        }
    }())
}

Я есть способ? Когда я проверяю это, я получаю пустой Set как результат

1 Ответ

0 голосов
/ 30 августа 2018

Вы используете arguments внутри внутреннего function*, который немедленно вызывается без аргументов, поэтому arguments пустые, поэтому повторение по нему приводит к тому, что возвращаемый набор будет пустым , Вместо этого я бы использовал синтаксис параметра rest во внешней функции для сбора аргументов в правильный массив, а затем вы можете выполнить итерацию по массиву:

(Откройте консоль браузера, а не консоль фрагмента, чтобы увидеть результат Set:)

const set1 = new Set(['1', '2', '3']);
const set2 = new Set(['4', '5', '6']);
const set3 = new Set(['7', '8', '9']);

const mergeSets = (...sets) => new Set(function* () {
  for (const set of sets) yield* set;
}());

console.log(
  mergeSets(set1, set2, set3)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...