我有一个具有所有子项和父项信息的JSON对象。
let shaFamily = {
"name": "Shan",
"wifeName": "Anga",
"isMarried": true,
"childrens": {
"son": [{
"name":"Chit",
"wifeName": "Amba",
"isMarried": true,
"genration":1,
"childrens": {
"son":[
{
"name":"Vritha",
"genration":2,
"isMarried": false
}
],
"doughter": [
{
"name":"Dritha",
"husbandName": "Jaya",
"genration":2,
"isMarried": true,
"childrens": {
"son": [
{
"name":"Yodhan",
"isMarried": false
}
],
"doughter": []
}
},
{
"name":"Tritha",
"genration":2,
"isMarried": false
}
]
}
},
{
"name":"Ish",
"genration":1,
"isMarried": false
},
{
"name":"Vich",
"genration":1,
"wifeName": "Lika",
"isMarried": true,
"childrens": {
"son": [],
"doughter": [
{
"name":"Vila",
"genration":2,
"isMarried": false
},
{
"name":"Chika",
"genration":2,
"isMarried": false
}
]
}
},
{
"name":"Aras",
"genration":1,
"wifeName": "Chitra",
"isMarried": true,
"childrens": {
"son": [
{
"name":"Ahit",
"genration":2,
"isMarried": false
}
],
"doughter": [
{
"name":"Jnki",
"genration":2,
"husbandName": "Arit",
"isMarried": true,
"childrens": {
"son": [
{
"name":"Laki",
"genration":3,
"isMarried": false
}
],
"doughter": [
{
"name":"Lavnya",
"genration":3,
"isMarried": false
}
]
}
}
]
}
}
],
"doughter": [
{
"name":"Satya",
"genration":1,
"husbandName": "Vyan",
"isMarried": true,
"childrens": {
"son": [
{
"name":"Asva",
"wifeName": "Satvy",
"genration":2,
"isMarried": true,
"childrens": {
"son": [
{
"name":"Vasa","genration":3,
"isMarried": false
}
],
"doughter": []
}
},
{
"name":"Vyas",
"wifeName": "Krpi",
"genration":2,
"isMarried": true,
"childrens": {
"son": [
{
"name":"Kriya","genration":3,
"isMarried": false
}
],
"doughter": [
{
"name":"Krithi",
"genration":3,
"isMarried": false
}
]
}
}
],
"doughter": [
{
"name":"Atya",
"genration":2,
"isMarried": false
}
]
}
}
]
}
}
从孩子这里我想知道谁是他的父母。
function checkPerson(data , personName ) {
var result = 0;
if( data !== null && typeof data == "object" ) {
Object.entries(data).forEach(([key, value] ) => {
if( value === personName && ( key === "wifeName" || key === "name" || key==="husbandName")){
console.log(data);
}
if(result) return result;
else result = checkPerson(value, personName);
});
}
return result;
}
checkPerson(shaFamily,“ Vritha”) 输出:Chit Amba
checkPerson(shaFamily,“ Yodhan”) 输出:Jaya Dritha
从上面的JSON中,我可以通过搜索我想要该人的父母或grandParents的名称来通过名称来搜索人。我不知道该怎么做。
答案 0 :(得分:4)
没有通用的方法来获取JSON中的父对象。请看以下示例:
var myObj = {
x: 12,
y: {
nestedProp: "hello"
}
};
如果我们使用对象myObj.y
,则它根本没有引用封闭的myObj
。唯一的方法就是在您编写的算法中做一些额外的簿记工作。旁注,我还认为您不应该遍历所有键来进行名称检查:
function getParentsHelper(curNode, targetName) {
if (curNode.name === targetName || curNode.wifeName === targetName || curNode.husbandName === targetName){
return [curNode]; // base case 1 -- found the name
}
if (this.childrens === undefined){
return null; // base case 2 -- the name wasn't in this leg of the object tree
}
for (let i = 0; i < curNode.childrens.length; i++){ // recursive cases!
let result = getParents(curNode.childrens[i], targetName);
if (result !== null){ // we found the name in one of our children, add ourselves to the list of parents
result.unshift(curNode);
return result;
}
}
return null; // never found that name in the object tree!
}