找出嵌套JS对象中键的出现次数

Finding out number of occurence of a key in a nested JS object

我有一个像这样的嵌套对象

{
name: "John",
parent:{
 parent:{
  parent:{
  }
 }
}
}

现在我想获取主父对象的级别或者基本上是嵌套了多少次父对象。在这种情况下,我应该得到 3.

的输出

let obj = { // treat it like a tree
  name: "John",
  parent: {
    parent: {
      parent: {}
    }
  }
}

const findDepth = (root, key) => {
  let depth = 0;

  let loop = (obj) => {
    if (obj && obj[key]) {
      loop(obj[key]);
      depth++;
    }
  }
  loop(root);
  return depth;
}

const result = findDepth(obj, 'parent')

console.log(result);

你可以这样做:

const obj = {
name: "John",
parent:{
 parent:{
  parent:{
    parent:{
     parent:{
      parent:{
       }
      }
     }
    }
   }
  }
 }

const keyToTrack = 'parent';
let current = obj[keyToTrack],
     count = 0;

while (typeof current === 'object') {
     current = current[keyToTrack];
     count += 1;
}

console.log(`The key parent appears ${count} times`)

基本情况是您找不到钥匙。

var test = {
  name: "John",
  parent: {
    parent: {
      parent: {}
    }
  }
}

function testObject(object, nestedObject) {
  let i = 0;
  while (true) {
    if (object[nestedObject]) {
      object = object[nestedObject];
      i++;
    } else {
      return i;
    }
  }
}

console.log(testObject(test, 'parent'));

您可以通过签入传递的值来采用递归和迭代方法,如果它是一个数组,则检查所需的键并迭代数组的所有值或 return 零。

const
    getCount = (object, key) => object && typeof object === 'object'
        ? (key in object) + Object
            .values(object)
            .reduce((s, o) => s + getCount(o, key), 0)
        : 0;
    
    
console.log(getCount({ name: "John", parent: { parent: { parent: {} } } }, 'parent'));

您可以像这样使用 while 来做到这一点:

let obj = {
  name: "John",
  parent: {
    parent: {
      parent: {
        parent: {
          parent: {
            parent: {}
          }
        }
      }
    }
  }
};

let key = 'parent', i = 0;
while(obj = obj[key]) ++i;

console.log(i)

你也可以像这样递归地做:

const obj = {
name: "John",
parent:{
 parent:{
  parent:{
    parent:{
     parent:{
      parent:{
       }
      }
     }
    }
   }
  }
 }
function findk(o,k,l=0){
  if (o[k]) l=findk(o[k],k,++l)
  return l
}
console.log(findk(obj,"parent"))