javascript - 被选元素在哪些元素中?

标签 javascript angular typescript

我有一个数组。数组中的元素表示菜单元素。我想根据我选择的菜单项创建“面包屑”。但是,它在工作时会在 3 个深度后动态提供错误。

// My Array

const menuArray = [{
    "label": "Dashboard"
  },
  {
    "label": "Products",
    "items": [{
        "label": "All Products"
      },
      {
        "label": "New Product"
      },
      {
        "label": "Product Categories"
      }
    ]
  },
  {
    "label": "Posts",
    "items": [{
        "label": "All Posts"
      },
      {
        "label": "New Post"
      },
      {
        "label": "Post Categories"
      }
    ]
  },
  {
    "label": "Sliders"
  },
  {
    "label": "Settings",
    "items": [{
        "label": "General Settings"
      },
      {
        "label": "User",
        "items": [{
            "label": "Your Profile"
          },
          {
            "label": "Edit Profile"
          }
        ]
      },
      {
        "label": "Social Settings"
      },
      {
        "label": "Link Settings"
      }
    ]
  }
];

// The function I experiment with
writeParent(event, arr) {

  let ct = 0;
  let found = false;
  let parentsLine = [];

  arr.some((e) => {
    parentsLine = [];
    let curr = e;
    for (curr; curr.items != null; curr = curr.items[0]) {
      if (event.label == curr.label) {
        found = true;
        return true;
      }
      parentsLine.push(curr.label);

    }

    if (event.label == curr.label) {
      found = true;
      return true;
    }


  });
  if (found) {
    return parentsLine;
  } else {
    return 'ERR: elm not found';
  }
}


console.log(writeParent({
  "label": "Edit Profile"
}, menuArray));

比如我选择的元素是;

{
  "label": "New Post"
}

我要得到;

[
  {
    "label": "Posts"
  },
  {
    "label": "New Post"
  }
]

或者

如果我选择的元素是;

{
  "label": "Edit Profile"
}

我要得到;

[
  {
    "label": "Settings"
  },
  {
    "label": "User"
  },
  {
    "label": "Edit Profile"
  }
]


我不知道如何找到所选元素的父元素。我该怎么做?

最佳答案

我已经解决了这个问题。

menuArray = [{
    "label": "Dashboard"
  },
  {
    "label": "Products",
    "items": [{
        "label": "All Products"
      },
      {
        "label": "New Product"
      },
      {
        "label": "Product Categories"
      }
    ]
  },
  {
    "label": "Posts",
    "items": [{
        "label": "All Posts"
      },
      {
        "label": "New Post"
      },
      {
        "label": "Post Categories"
      }
    ]
  },
  {
    "label": "Sliders"
  },
  {
    "label": "Settings",
    "items": [{
        "label": "General Settings"
      },
      {
        "label": "User",
        "items": [{
            "label": "Your Profile"
          },
          {
            "label": "Edit Profile"
          }
        ]
      },
      {
        "label": "Social Settings"
      },
      {
        "label": "Link Settings"
      }
    ]
  }
];

function find(array, event) {
    if (typeof array != 'undefined') {
      for (let i = 0; i < array.length; i++) {
        if (array[i].label == event.label) return [event.label];
        let a = this.find(array[i].items, event);
        if (a != null) {
          a.unshift(array[i].label);
          return a;
        }
      }
    }
    return null;
}

console.log(find(menuArray, { "label": "Edit Profile" }));

关于javascript - 被选元素在哪些元素中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58400896/

相关文章:

node.js - Nestjs UnhandledPromiseRejectionWarning : TypeError: this. flushLogs 不是一个函数

angular - 如何根据 Angular 2中的按钮单击移动div滚动位置

javascript - 迁移到 Angular v9。 i18n 重大变化

javascript - jQuery Ajax WCF POST - 返回 bool 值

javascript - 在服务器和客户端之间共享 JavaScript 模型代码,这种方法有效吗?

javascript - Angular:子路由匹配

angular - Typescript - 如何在 map 中设置对象键的值

javascript - Material UI (Scrollspy) - React - 使用标签在列表中移动并自动滚动到索引

javascript - 将 FormPanel 放入 RowExpander 中?

javascript - AJAX setInterval 错误