簡體   English   中英

無限循環:BFS 獲取嵌套對象的所有值(Javascript)

[英]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的每次迭代中,當迭代currentvalues時,如果它是 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.

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