【发布时间】:2021-05-04 22:21:39
【问题描述】:
我正在处理在对象深处寻找属性的某些困难。以下是一些场景:
{ redacted: true } vs { someProperty: true, anotherProperty: { redacted: true } }
我希望能够在任何对象级别找到redacted 键。我试图在库lodash 中找到一些解决方案,但没有成功。
用这个接口实现一些东西会很棒:
findDeepProperty(obj, 'redacted')
另外,有没有办法通过使用像lodash这样的外部库来实现这个算法?
【问题讨论】:
-
从概念上讲,如果您不知道它的上下文,那么获取值的意义何在?查找
obj.data.redacted与obj.parent.redacted可能有非常不同的含义。实际上,预期的结果是什么?只是价值?还是路径和价值?如果有多个匹配项怎么办?你想要什么结果? -
某些值比较复杂,例如:
{ salary: { amount: { redacted: true }, currency: "R$" } }与对象级别无关,必要的逻辑只是检查redacted键是否存在 不可能有多个匹配 - 这是一个设计规则 -
但是你知道该属性应该在哪里。明白了:
console.log(obj.salary.amount.redacted != undefined);如果这是关于处理路径上的空检查,比如让我们说salary是undefined。查看optional chaining operator。喜欢console.log(obj.salary?.amount.redacted != undefined); -
@Thomas 并不总是那么简单。我必须先使用递归深度搜索
标签: javascript data-structures