0

この for ループを改善したいと思います。理想的には、変数 'nodeFound' を関数スコープ外にしたくないので、ループが完了した後ではなく、見つかったらすぐに 'nodeFound' を返したいと思います。

var nodeFound;
proto._getNodeById = function(id, node) {
    var data = node || this._data;
    var l = data.length;
    var i;

    for ( i = 0; i < l; i++) {
        if (Number(id) === data[i].id) {
            nodeFound = data[i];
        } else {
            if (data[i].children.length) {
                this._getNodeById(id, data[i].children);
            }
        }
    }
    return nodeFound;
};
4

3 に答える 3

0

を使用しwhileます。

proto._getNodeById = function(id, node) {
    var data = node || this._data;
    var l = data.length;
    var i=0;
    var found = false;
    var nodeFound = undefined;

    while ( i < l && !found ) {
        if (Number(id) === data[i].id) {
            nodeFound = data[i];
            found = true
        } else {
            if (data[i].children.length) {
                var node = this._getNodeById(id, data[i].children);
                if (node != undefined) {
                    nodeFound = node; 
                    found = true;
                }
            }
        }
        i++;
    }
    return nodeFound;
};
于 2013-07-19T09:30:18.960 に答える
0
proto._getNodeById = function(id, node) {

  var data = node || this._data;
  var thisNode = null;
  var l = data.length;
  var i;

  id=+id; // convert to number

  for ( i = 0; i < l; i++) {
      thisNode = data[i] ;
      if (id === thisNode.id) {
          return thisNode;
      } else if (thisNode.children.length) {
          thisNode = this._getNodeById(id, thisNode.children);
          if (thisNode) return thisNode; 
      }        
  }
  return null;
};
于 2013-07-19T09:36:57.133 に答える