找出嵌套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对象中键的出现次数的主要内容,如果未能解决你的问题,请参考以下文章