【问题标题】:Is there any way to get a parentNode from an Object? [duplicate]有没有办法从对象中获取父节点? [复制]
【发布时间】:2021-11-20 23:39:32
【问题描述】:

假设我访问了一个对象内部的某个对象,但是不知道前一个对象的key是什么,有没有办法获取这个对象的parent的key?

Basically I would like to get the relative node of a property of an object

var house = {
  bedroom: {
    bed: 'I am a bed'
  }
}

我得到了I'm a bed,我知道她的密钥是bed,但我不知道她在bedroom 中是否有任何方法可以通过知道bed 获得bedroom?。它类似于 parentNode,但类似于对象。

这是我的愿望:“bed.parentNoderesult bedroom”但在对象中;

【问题讨论】:

  • 你必须在卧室设置一个属性来引用它的父节点
  • @about14sheep 我不明白,能不能更具体一点?谢谢
  • 我很好奇这部分I know her key is bed 。您能否详细说明您如何知道密钥是bed
  • @MihaiParaschivescu 我不是 OP,但我认为他们只是在引用他们的例子

标签: javascript object


【解决方案1】:

您可以这样做的一种方法是在您遍历对象时,将键存储为变量。

function recurseObject(obj, parentNode) {
    let result;
    if (typeOf obj !== 'object') {
        return
    }
    for(const key in obj) {
        if(//house[key] is the element you want the parent node of) {
             return parentNode
        }
        result = recurseObj(obj[key], key)
    }
    return result
}

这个函数简单地通过一个传递给它前一个键的对象递归。当您找到您想要父节点的值时,您只需将其返回。如果 if 块中的逻辑没有找到你想要的,它将返回 undefined

  • 这只是一个遍历存储前一个键的对象的函数。我认为对此会有一种更简洁的方法,但是我需要了解更多您的逻辑

【讨论】:

  • 好的,今天我已经达到了我的极限,但是明天,分析你的答案,我会给你打分,谢谢
  • house['bedroom'] 和 house['cellar'] 都有床怎么办?我要求更多是为了 OP,而不是为了你,因为我认为你所做的是正确的。
  • 那么 OP 将不得不非常明确地使用他的 if 语句。也许if(obj[key] === 'bed' && parentNode !== 'cellar') 我认为最好的选择是完全尝试其他东西。您不需要反向查找对象键的地方。
猜你喜欢
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
  • 2022-10-14
  • 2018-11-08
  • 1970-01-01
  • 2021-06-17
相关资源
最近更新 更多