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

Posted

技术标签:

【中文标题】找出嵌套JS对象中键的出现次数【英文标题】:Finding out number of occurence of a key in a nested JS object 【发布时间】:2022-01-24 06:00:07 【问题描述】:

我有一个类似的嵌套对象


name: "John",
parent:
 parent:
  parent:
  
 


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

【问题讨论】:

到目前为止你尝试了什么? 嗨@vaira 我已经尝试过传统的 for 循环方法。我希望是否有任何类型的预先构建的 lodash 函数来完成这项工作 【参考方案1】:

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

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"))

【讨论】:

我建议给参数说出名字。除此之外,这或多或少是我要写的。【参考方案2】:

您可以采用递归和迭代的方法,通过签入移交的值,如果它是一个数组,则检查想要的键并迭代数组的所有值或返回零。

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'));

【讨论】:

【参考方案3】:

你可以这样做:

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`)

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

【讨论】:

【参考方案4】:

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);

【讨论】:

这是一个正确的递归解决方案,但您不认为它会向堆栈添加更多函数调用吗? 这里的函数调用没有价值,更不用说巨大的价值了,如果不是这样,递归是最好的方法。【参考方案5】:
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'));

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案6】:

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

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

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

console.log(i)

【讨论】:

以上是关于找出嵌套JS对象中键的出现次数的主要内容,如果未能解决你的问题,请参考以下文章

JS中鼠标左右键以及中键的事件

js查找数组中出现次数最多的元素

Js对象(五)如何查找字符串中出现次数最多的字符 2021-11-24

js常会问的问题:找出字符串中出现次数最多的字符。

根据对象中键的名称过滤对象数组[重复]

找出字符串中出现次数最多的字符和次数