我正在尝试使用伪经典方法创建一个deepSearch方法,该方法遍历树,在每个节点的值中创建一个新的树,结果具有相同的结构和包含的结果。
For instance:
var root1 = new Tree(1);
var branch2 = root1.addChild(2);
var branch3 = root1.addChild(3);
var leaf4 = branch2.addChild(4);
var leaf5 = branch2.addChild(5);
var leaf6 = branch3.addChild(6);
var leaf7 = branch3.addChild(7);
var newTree = root1.deepSearch(function (value) {
return value * 2;
})
newTree.value // 2
newTree.children[0].value // 4
newTree.children[1].value // 6
newTree.children[0].children[1].value // 10
newTree.children[1].children[1].value // 14
root1.value // still 1下面是我的函数。
var deepSearch = function(value) {
this.value = value;
this.children = [];
};
deepSearch.prototype.addChild = function(value){
var child = new deepSearch(value);
this.children.push(child);
return child;
};
deepSearch.prototype.map = function(val, cb){
if(this.value === val){
cb(this.value);
}
if(this.children){
for(var i = 0; i < this.children.length; i++){
if(this.children[i].contains(val)){
cb(this.value);
}
}
}
return false;
};你知道我哪里做错了吗?
发布于 2018-01-30 12:28:10
下面是一个递归map调用的示例:
class Tree {
constructor(value) {
this.value = value;
this.children = [];
}
addChild(value) {
var child = new Tree(value);
this.children.push(child);
return child;
}
map(callback) {
function mapNode(node, copy, callback) {
for (let child of node.children)
mapNode(child, copy.addChild(callback(child.value)), callback);
}
var copy = new Tree(callback(this.value));
mapNode(this, copy, callback);
return copy;
}
}
var root1 = new Tree(1);
var branch2 = root1.addChild(2);
var branch3 = root1.addChild(3);
var leaf4 = branch2.addChild(4);
var leaf5 = branch2.addChild(5);
var leaf6 = branch3.addChild(6);
var leaf7 = branch3.addChild(7);
var newTree = root1.map(function (value) {
return value * 2;
})
console.log(
newTree.value, // 2
newTree.children[0].value, // 4
newTree.children[1].value, // 6
newTree.children[0].children[1].value, // 10
newTree.children[1].children[1].value, // 14
root1.value // still 1
)
https://stackoverflow.com/questions/48513669
复制相似问题