source
是Yuka js库中的一部分,它提供了一些用于遍历对象树的函数。
depthFirstSearch
函数通过深度优先遍历来遍历对象树。root
参数是要遍历的对象,visitor
参数是一个函数,用来处理遍历时访问到的每个节点。
visitor
函数的三个参数分别为:
node
: 当前访问到的节点parent
: 当前节点的父节点depth
: 当前节点的深度例如:
const object = {
a: {
b: {
c: {
d: 'Hello World!'
}
}
}
};
function visitor(node, parent, depth) {
console.log('Node:', node, 'Parent:', parent, 'Depth:', depth);
}
depthFirstSearch(object, visitor);
运行结果为:
Node: { b: { c: { d: 'Hello World!' } } } Parent: { a: { b: { c: { d: 'Hello World!' } } } } Depth: 1
Node: { c: { d: 'Hello World!' } } Parent: { b: { c: { d: 'Hello World!' } } } Depth: 2
Node: { d: 'Hello World!' } Parent: { c: { d: 'Hello World!' } } Depth: 3
breadthFirstSearch
函数通过广度优先遍历来遍历对象树。root
参数是要遍历的对象,visitor
参数是一个函数,用来处理遍历时访问到的每个节点。与depthFirstSearch
函数不同的是,breadthFirstSearch
函数返回一个Promise
对象,在遍历完成后会resolve该对象。
visitor
函数的三个参数同样为:
node
: 当前访问到的节点parent
: 当前节点的父节点depth
: 当前节点的深度例如:
const object = {
a: {
b: {
c: {
d: 'Hello World!'
}
}
}
};
function visitor(node, parent, depth) {
console.log('Node:', node, 'Parent:', parent, 'Depth:', depth);
}
breadthFirstSearch(object, visitor).then(() => {
console.log('Traversal done!');
});
运行结果为:
Node: { a: { b: { c: { d: 'Hello World!' } } } } Parent: null Depth: 0
Node: { b: { c: { d: 'Hello World!' } } } Parent: { a: { b: { c: { d: 'Hello World!' } } } } Depth: 1
Node: { c: { d: 'Hello World!' } } Parent: { b: { c: { d: 'Hello World!' } } } Depth: 2
Node: { d: 'Hello World!' } Parent: { c: { d: 'Hello World!' } } Depth: 3
Traversal done!
source
提供了两种遍历对象树的方式,分别是深度优先遍历和广度优先遍历。通过这些函数,我们可以方便地遍历一个对象及其嵌套的子对象,并对每个节点进行处理。