Given an Object, I want to get the parent key starting from the child. Since I only care about the key I'm iterating from enntries, but it always returns undefined.
var book = {
"chapter1": {
"paragraph1": {
"text": "..."
},
"paragraph2": {
"text": "..."
}
},
"chapter2": {
"paragraph3": {
"text": "..."
},
"paragraph4": {
"text": "..."
}
},
"chapter3": {
"paragraph5": {
"text": "..."
},
"paragraph6": {
"text": "..."
}
}
};
var section = "paragraph3";
const category = Object.entries(book).find(([, e]) => Object.values(e).includes(section)); /// should return chapter2
if (category) {
console.log(category[0], category[1]);
} else {
console.log("Not Found");
}
Simply replace .values() by .keys() in your code:
var book = {
"chapter1": {
"paragraph1": {
"text": "..."
},
"paragraph2": {
"text": "..."
}
},
"chapter2": {
"paragraph3": {
"text": "..."
},
"paragraph4": {
"text": "..."
}
},
"chapter3": {
"paragraph5": {
"text": "..."
},
"paragraph6": {
"text": "..."
}
}
};
var section = "paragraph3";
const category = Object.entries(book).find(([, e]) => Object.keys(e).includes(section)); /// should return chapter2
if (category) {
console.log(category[0], category[1]);
} else {
console.log("Not Found");
}
here is a solution how to get parent key from children
var book = {
chapter1: {
paragraph1: {
text: '...'
},
paragraph2: {
text: '...'
}
},
chapter2: {
paragraph3: {
text: '...'
},
paragraph4: {
text: '...'
}
},
chapter3: {
paragraph5: {
text: '...'
},
paragraph6: {
text: '...'
}
}
};
var section = 'paragraph3';
const category = Object.entries(book).find(e =>
Object.keys(e[1]).includes(section)
); /// should return chapter2
if (category) {
console.log(category[0]);
} else {
console.log('Not Found');
}