如何通过属性在嵌套对象中搜索对象并返回带有父对象的键和值的对象?

SB-*_*994 0 javascript algorithm tree

我有一个嵌套的对象

let data = {
  address: "123 Street, state, country",
  childObject1: {
    foo: ["bar"],
    person: "Hailey"
  },
  relatedCustomers: {
    childObject: {
      foo: ["bar"],
      person: "Hailey2"
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

我想按属性搜索具有键和值的对象。

例如

搜索-我的功能

数据-嵌套对象

search("person", data)
Run Code Online (Sandbox Code Playgroud)

我明白了

{
  childObject: "Hailey2",
  childObject1: "Hailey"
}
Run Code Online (Sandbox Code Playgroud)

我写了代码,用person搜索所有值:

https://codesandbox.io/s/suspicious-pascal-qyvjw

但我无法获取父对象键并因此得到对象:

{
  childObject: "Hailey2",
  childObject1: "Hailey"
}
Run Code Online (Sandbox Code Playgroud)

小智 6

请使用以下代码查找父键:

let search = (needle, parentKey, haystack, found = []) => {
  Object.keys(haystack).forEach(key => {
    if (key === needle) {
      found.push({
        [key]: haystack[key],
        parentKey
      });
      return found;
    }
    if (typeof haystack[key] === "object") {
      search(needle, key, haystack[key], found);
    }
  });
  return found;
};

console.log(search("person", "data", data));
`;
Run Code Online (Sandbox Code Playgroud)

我刚刚在函数中传递了父键,并在需要时保存了它。我希望这是您要寻找的。谢谢。