[英]Infinite loop: BFS to get all values of the nested objects (Javascript)
我正在嘗試通過 BFS 獲取嵌套 object 的所有值:這是示例 object:
let schedule =
{
date: '0305',
meeting1: {
id: '00001',
start: '10:30'
},
meeting2: {
id: '00002',
start: '12:30'
}
}
理想output:
['0305', '00001', '10:30', '00002', '12:30']
我的嘗試:
function getNestedObjValuesByQueue(obj){
let queue = [obj]
let values = []
while (queue.length > 0){
let current = queue.shift();
console.log(current);
values = values.concat(Object.keys(current));
for (let key of Object.values(current)){
queue.push(key)
}
}
// console.log(values)
}
getNestedObjValuesByQueue(schedule)
好吧,當我嘗試記錄電流時,會出現無限循環:
5
0
0
0
0
1
1
0
:
3
0
0
0
0
0
2
1
2
:
3
0
0
3
0
5
0
0
0
0
1
1
0
:
仍然不知道這里發生了什么......有人可以幫我嗎? 提前致謝。
我不認為while
循環是正確的方法。 對於一般情況,您需要遞歸 function。 遇到 object 時,將其推送到不同的隊列。 最后,在迭代一個深度后,如果新隊列中有任何項目,則再次遞歸調用 function。
let schedule = { date: '0305', meeting1: { id: '00001', start: '10:30' }, meeting2: { id: '00002', start: '12:30' } } function getNestedObjValuesByQueue(queue, values = []){ const nextQueue = []; for (const item of queue) { for (const val of Object.values(item)) { if (val && typeof val === 'object') { nextQueue.push(val); } else { values.push(val); } } } if (nextQueue.length) { getNestedObjValuesByQueue(nextQueue, values); } return values; } console.log(getNestedObjValuesByQueue([schedule]))
在while-loop
的每次迭代中,當迭代current
的values
時,如果它是 object 將其推送到queue
,否則將其保存在values
中:
const schedule = { date: '0305', meeting1: { id: '00001', start: '10:30' }, meeting2: { id: '00002', start: '12:30' } }; function getNestedObjValuesByQueue(obj){ let queue = [obj] let values = [] while (queue.length > 0){ let current = queue.shift(); for (let val of Object.values(current)){ if(typeof val === "object") queue.push(val); else values.push(val); } } console.log(values) } getNestedObjValuesByQueue(schedule)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.