如何查询校验数组中嵌套对象,判断两个Node节点是否已存在邻接关系
解决方案
最优实现方式
核心思路是用Array.prototype.some()遍历neighbours数组,匹配oppositeNode是否等于目标节点,该方法匹配到第一个符合条件的元素就会终止遍历,性能最优。
你提到的解构赋值完全适用于这个场景,可以简化代码写法。
基础实现写法
// 直接判断逻辑 if (nodea.neighbours.some(neighbour => neighbour.oppositeNode === nodeb)) { // 执行逻辑x }
结合解构赋值的简化写法
直接在回调参数中解构出oppositeNode,代码更简洁:
if (nodea.neighbours.some(({ oppositeNode }) => oppositeNode === nodeb)) { // 执行逻辑x }
可复用封装方案
建议把判断逻辑封装为Node类的内置方法,后续调用更方便:
class Node { constructor(nodeName) { this.nodeName = nodeName; this.neighbours = []; } // 新增判断邻接的实例方法 hasNeighbour(targetNode) { return this.neighbours.some(({ oppositeNode }) => oppositeNode === targetNode) } }; // 调用方式 if (nodea.hasNeighbour(nodeb)) { // 执行逻辑x }
补充说明
如果你的业务场景中nodeName可以唯一代表节点,即使是不同实例也视为同一个节点,可以把匹配条件改成判断nodeName相等:
hasNeighbour(targetNode) { return this.neighbours.some(({ oppositeNode }) => oppositeNode.nodeName === targetNode.nodeName) }
内容的提问来源于stack exchange,提问作者user16602393
相关产品推荐
相关产品推荐

