Skip to content

通过 value 找 key

js
function searchValue(obj, value, index = 1) {
  const res = []
  for (const key in obj) {
    if (obj[key] === value) {
      // 如果不在第一层,则直接返回结果
      if (index !== 1) return [key]
      // 在第一层,则加入结果集中
      res.push([key])
      continue
    }

    // 没找到,且为 object、array 则继续向下寻找(暂时不考虑其他数据结构)
    if (obj[key] instanceof Object) {
      const temp = searchValue(obj[key], value, index + 1)
      if (temp) {
        // 如果不在第一层,则向上返回结果集
        if (index !== 1) return [key, ...temp]
        res.push([key, ...temp])
      }
    }
  }
  // 如果在第一层,返回结果
  // 不在第一层,能到这里,证明没找到,返回 null
  return index === 1 ? res : null
}

let obj = {
  a: 1,
  b: {
    c: 2
  },
  d: [1, 2, 3],
  e: {
    f: {
      g: 5
    }
  }
}
console.log(searchValue(obj, 2)) // [ [ 'b', 'c' ], [ 'd', '1' ] ]