无限循环: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
中的每一次迭代中,当遍历current
的values
时,如果它是一个对象,则将其推送到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)
我正在尝试通过 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
中的每一次迭代中,当遍历current
的values
时,如果它是一个对象,则将其推送到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)