为了账号安全,请及时绑定邮箱和手机立即绑定

基于循环的扩展算法

基于循环的扩展算法

墨色风雨 2023-11-02 20:17:57
我的算法计算通过 DOM 的路径。它从给定的组件开始并沿树向上。每次父组件具有特定属性时,算法都会将其值添加到路径中。_computePath(aComponent) {  let result = '';  let parent = aComponent.parentNode;  while (parent.tagName !== 'MY-ROOT-COMPONENT') {    if (parent.hasAttribute('my-attribute')) {      result = `/${parent.getAttribute('my-attribute')}${result}`;    }    parent = parent.parentNode;  }  return result;}在我的应用程序的其他部分,我需要一个稍微不同的版本。_computePath(aComponent) {  let result = '';  let parent = aComponent.parentNode;  while (parent.tagName !== 'MY-ROOT-COMPONENT') {    if (parent.tagName === 'SPECIAL-COMPONENT') {      result = null;      break;    }    if (parent.condition === 'special') {      result = null;      break;    }    if (parent.hasAttribute('my-attribute')) {      result = `/${parent.getAttribute('my-attribute')}${result}`;    }    parent = parent.parentNode;  }  return result;}如何在不重复代码的情况下扩展第一个循环的算法?可能有一个非常简单的解决方案,但不知何故我无法弄清楚。
查看完整描述

1 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

让函数接受回调来测试导致其中断的条件。


_computePath(aComponent, stopfun = parent => false) {

  let result = '';

  let parent = aComponent.parentNode;


  while (parent.tagName !== 'MY-ROOT-COMPONENT') {

    if (stopfun(parent)) {

      result = null;

      break;

    }


    if (parent.hasAttribute('my-attribute')) {

      result = `/${parent.getAttribute('my-attribute')}${result}`;

    }

    parent = parent.parentNode;

  }


  return result;

}


let result1 = obj1._computePath(component1); // no extra stop check

let result2 = obj2._computePath(component2, parent => parent.tagName === 'SPECIAL-COMPONENT' || parent.condition === 'special');


查看完整回答
反对 回复 2023-11-02
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信