[英]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.