首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Tree - JS的深度搜索

基于Tree - JS的深度搜索
EN

Stack Overflow用户
提问于 2018-01-30 11:59:11
回答 1查看 108关注 0票数 0

我正在尝试使用伪经典方法创建一个deepSearch方法,该方法遍历树,在每个节点的值中创建一个新的树,结果具有相同的结构和包含的结果。

代码语言:javascript
复制
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

下面是我的函数。

代码语言:javascript
复制
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;
};

你知道我哪里做错了吗?

EN

回答 1

Stack Overflow用户

发布于 2018-01-30 12:28:10

下面是一个递归map调用的示例:

代码语言:javascript
复制
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
)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48513669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档