首页 > 解决方案 > 在循环中修改集合

问题描述

我在 TypeScript 中有一组对象。每个对象都有一个被调用的方法,该方法getSubObjects返回包含相同方法的相同类型对象的集合getSubObjects。我的要求是

  1. 必须遍历集合getSubObjects中每个对象的原始集合调用。
  2. 对于每个对象getSubObjects再次返回调用。
  3. 继续返回每个对象,直到没有对象

所以在我的循环中,我想做如下的事情

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

我认为这在 TypeScript 中是不可能的,我能想到的唯一选择是诉诸递归,但如果有另一种方法可以做到这一点,我宁愿避免它。

标签: typescriptcollections

解决方案


您可以通过使用如下的简单循环来避免递归(尽管我自己没有运行 [pseudo] 代码):

首先为每个对象添加另一个布尔属性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];
}

推荐阅读