无限循环:BFS 获取嵌套对象的所有值(Javascript)

Infinite loop: BFS to get all values of the nested objects (Javascript)

我正在尝试通过 BFS 获取嵌套对象的所有值: 这是示例对象:

let schedule =
{
  date: '0305',
  meeting1: {
    id: '00001',
    start: '10:30'
  },
  meeting2: {
    id: '00002',
    start: '12:30'
  }
}

理想输出:

['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 循环不是正确的方法。对于一般情况,您需要一个递归函数。遇到对象时,将其推入不同的队列。最后,在迭代一个深度后,如果其中有任何项目,则使用新队列再次递归调用该函数。

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时,如果它是一个对象,则将其推送到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)