Модифицируйте коллекцию, проходя через нее - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть коллекция объектов в TypeScript. У каждого объекта есть метод с именем getSubObjects, который возвращает коллекцию объектов одного типа, содержащих один и тот же метод getSubObjects. Мое требование:

  1. Необходимо перебрать исходную коллекцию, вызывая getSubObjects каждого объекта в коллекции.
  2. Для каждого возвращаемого объекта снова вызовите getSubObjects.
  3. Продолжайте работать для каждого возвращаемого объекта, пока нет объекта

Так что в моем l oop я хочу сделать что-то вроде следующего

objCol.forEach(item => {
  const col = item.getSubObjects();
  if(col){
      objCol.pushRange(col)
  }
});

Я не Я не думаю, что это возможно в TypeScript, единственная альтернатива, о которой я могу подумать, - это прибегнуть к рекурсии, но я бы предпочел этого избежать, если есть альтернативный способ сделать это.

1 Ответ

0 голосов
/ 10 апреля 2020

Вы можете избежать рекурсии, используя наивный l oop, как показано ниже (хотя я сам не запускал [псевдо-код]):

Сначала добавьте еще одно логическое свойство processed к каждому объекту, инициализировано false. Тогда:

const processedAll = () => !objCol.some(o => !o.processed);

while (!processedAll()) {
    const extension = [];
    objCol.forEach(item => {
        if (!item.isProcessed) {
            item.processed = true;
            const col = item.getSubObjects();
            if (col) {
                col.processed = false;
                extension.pushRange(col)
            }
        }
    });
    objCol = [...objCol, extension];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...