找出嵌套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"))
我有一个像这样的嵌套对象
{
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"))