簡體   English   中英

在多個 for 循環中嵌套 for of 循環 typescript

[英]Nested for of loop inside multiple for loops typescript

我不確定這是否可能,但我想做以下事情。 我有對象數組,我想從中生成一些值,如下所示:

const arr = [
  {
    type: "color",
    values: [
      {
        name: "Color",
        option: "Black",
      },
      {
        name: "Color",
        option: "Blue",
      },
    ],
  },
  {
    type: "size",
    values: [
      {
        name: "Size",
        option: "XS",
      },
      {
        name: "Size",
        option: "M",
      },
    ],
  },
];
let oldArr: any[] = [];
if (arr.length === 1) {
  for (const iterator of arr[arr.length - 1].values) {
    oldArr.push(iterator);
  }
} else if (arr.length === 2) {
  for (const iterator of arr[arr.length - 1].values) {
    for (const iterator2 of arr[arr.length - 2].values) {
      oldArr.push([iterator, iterator2]);
    }
  }
} else if (arr.length === 3) {
  for (const iterator of arr[arr.length - 1].values) {
    for (const iterator2 of arr[arr.length - 2].values) {
      for (const iterator3 of arr[arr.length - 3].values) {
        oldArr.push([iterator, iterator2, iterator3]);
      }
    }
  }
} else if (arr.length === 4) {
  for (const iterator of arr[arr.length - 1].values) {
    for (const iterator2 of arr[arr.length - 2].values) {
      for (const iterator3 of arr[arr.length - 3].values) {
        for (const iterator4 of arr[arr.length - 4].values) {
          oldArr.push([iterator, iterator2, iterator3, iterator4]);
        }
      }
    }
  }
}

有可能在遞歸模式下執行 N 次嗎? 添加了真正的對象數組...

我需要的預期 Output 是一個數組數組:

 const oldArr = [

[
    {
        "name" : "Color", 
        "option" : "Blue", 
    }, 
    {
        "name" : "Size", 
        "option" : "XS"
    }
],
[
    {
        "name" : "Color", 
        "option" : "Black", 
    }, 
    {
        "name" : "Size", 
        "option" : "XS"
    }
],
[
    {
        "name" : "Color", 
        "option" : "Blue", 
    }, 
    {
        "name" : "Size", 
        "option" : "M"
    }
],
[
    {
        "name" : "Color", 
        "option" : "Black", 
    }, 
    {
        "name" : "Size", 
        "option" : "M"
    }
]
]

在發布之前我必須添加哪些細節?

這是一個遞歸 function 的示例,它應該可以實現您的結果。 我已經對最多 4 個嵌套循環的輸入進行了測試,它似乎可以工作。 arguments 大多是自我解釋的, arr是您正在讀取的數組, oldArr是您正在寫入的數組, vals是用於跟蹤所有迭代器值的列表(您應該傳遞一個空列表開始,), level是“遞歸級別”, target_level是您想要的最終遞歸級別。 recursive_func(arr, oldArr, [], 1, 4)如果您想獲得與 4 嵌套循環示例相同的結果,如何運行它的示例。

如果嵌套for循環的數量始終與arr的長度相同,請告訴我,以便可以稍微簡化 function。

 function recursive_func(arr, oldArr, vals, level, target_level) { for (const it_n of arr[arr.length - level].values) { vals.push(it_n); if (level == target_level) { oldArr.push(JSON.parse(JSON.stringify(vals))); } else { recursive_func(arr, oldArr, vals, level + 1, target_level); } vals.pop() } } const arr = [ { type: "color", values: [ { name: "Color", option: "Black", }, { name: "Color", option: "Blue", }, ], }, { type: "size", values: [ { name: "Size", option: "XS", }, { name: "Size", option: "M", }, ], }, ]; let oldArr = []; recursive_func(arr, oldArr, [], 1, arr.length); console.log(oldArr);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM