javascript - 获取嵌套值的路径

标签 javascript

我想这一定是个骗子,但我在 SO 上找不到它。给定这样一个对象:

let obj = { keyA: { keyB: 'hi', keyC: { keyD: null } }, keyE: 'hi' }

有没有一种方法可以找到给定值的关键路径,如下所示:

keyPaths(obj, 'hi') // -> [ 'keyA.keyB', 'keyE' ]
keyPaths(obj)       // -> [ 'keyA.keyB.keyD' ]

我尝试调整一些找到深层值(value)的答案,我几乎能够调整 this one that finds deep nulls ,但我不知道如何返回路径,而不仅仅是最深的键。

最佳答案

我会像这样进行深度优先搜索:

let obj = { keyA: { keyB: 'hi', keyC: { keyD: null } }, keyE: 'hi' }

function keyPaths(parent, value = null, chain) {
  let allResults = [];
  for (const prop in parent) {
    if (parent.hasOwnProperty(prop)) {
      const element = parent[prop];
      const newChain = chain ? chain + '.' + prop : prop;
      if (element === value) {
        allResults.push(newChain);
      }
      else if (Object.keys(prop).length > 1) {
        allResults = [...allResults, ...keyPaths(element, value, newChain)];
      }
    }
  }
  return allResults;
}

console.log(keyPaths(obj, 'hi')) // -> [ 'keyA.keyB', 'keyE' ]
console.log(keyPaths(obj))       // -> [ 'keyA.keyB.keyC' ]

基本上,我检查给定元素的所有属性以获得匹配值。如果某个属性与该值不匹配,但具有子属性,我将递归调用该函数,并将调用迭代和递归调用的结果合并。

关于javascript - 获取嵌套值的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55066140/

相关文章:

javascript - 度数转换不适用于反三 Angular 函数

javascript - typescript 类型检查机制

javascript - 正则表达式 - 匹配一个没有空格的字符串

javascript - Angular GroupBy 使用无 ng-repeat

JavaScript history.back() 有条件地

javascript - 数据表导出 pdf HTML 消息

javascript - 将具有动态变量数的参数对象转换为多个参数

javascript - 关于在javascript中使用数组进行web编程的问题

javascript - 为什么我的圆锥体被鼠标拖动时旋转不顺畅

JavaScript:如何将 HTML 字符串转换为 JavaScript 数字?