如何从子对象中获取父对象

时间:2019-08-25 02:31:15

标签: javascript node.js json

我有一个具有所有子项和父项信息的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的名称来通过名称来搜索人。我不知道该怎么做。

1 个答案:

答案 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!
}