繁体   English   中英

如何在对象中递归更改值?

[英]How to change values recursively in object?

我有以下对象,我想将所有“选择”键值从“是,否”更改为“显示,隐藏”。

我试图创建一个递归函数来循环对象子项 - 但由于某种原因我无法得到它的工作......

            var foo = {
            "data": [
                {
                    "body": [
                        {
                            "id": "title",
                            "label": "title",
                            "subType": "title",
                            "type": "text"
                        },
                        {
                            "id": "page1",
                            "label": "Home",
                            "choices": [
                                "show",
                                "hide"
                            ],
                            "childrenItems": [
                                {
                                    "id": "subMenu1",
                                    "label": "Gallery",
                                    "choices": [
                                        "yes",
                                        "no"
                                    ],
                                    "childrenItems": [
                                        {
                                            "id": "subMenu2",
                                            "label": "Artists",

                                            "choices": [
                                                "yes",
                                                "no"
                                            ],
                                            "childrenItems": [
                                                {
                                                    "id": "modernisem",
                                                    "label": "Modernisem"

                                                },
                                                {
                                                    "id": "contemporery",
                                                    "label": "Contemporery"

                                                }
                                            ]
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        }

        function setQuestionnaireChoises(prmData) {

        return getNestedElements(prmData)
        }

        function getNestedElements(prmData){
        if(!isObject && Array.isArray(prmData)){
            return getArrItems(prmData);
        }else{
            return getObjItems(prmData);
        }
        }

        function getArrItems(prmData){

            for (let index = 0; index < prmData.length; index++) {
                let arrItem = prmData[index];
                if(isObject){
                return getObjItems(arrItem)
                }else{
                    return getArrItems(arrItem)
                }

            }
        }

        function getObjItems(prmData){
            for (const key in prmData) {
                    let objItem = prmData[key];
                    if(key == 'choices'){
                    return objItem[key] = ["show, hide"]
                    }else{
        return  objItem[key]
                    }


            }

        }
        function isObject(prmObj) {
            return prmObj !== null && typeof prmObj === 'object' && Array.isArray(prmObj) === false ? true : false;
        }


        setQuestionnaireChoises(foo)

我的目的是操纵对象随着选择的变化返回自身......谢谢。

贾斌

代码太大,太复杂。 你可以用这种方式轻松做到,让数据

 var foo = {
  "data": [
    {
      "body": [
        {
          "id": "title",
          "label": "title",
          "subType": "title",
          "type": "text"
        },
        {
          "id": "page1",
          "label": "Home",
          "choices": [
            "show",
            "hide"
          ],
          "childrenItems": [
            {
              "id": "subMenu1",
              "label": "Gallery",
              "choices": [
                "yes",
                "no"
              ],
              "childrenItems": [
                {
                  "id": "subMenu2",
                  "label": "Artists",

                  "choices": [
                    "yes",
                    "no"
                  ],
                  "childrenItems": [
                    {
                      "id": "modernisem",
                      "label": "Modernisem"

                    },
                    {
                      "id": "contemporery",
                      "label": "Contemporery"

                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

你可以像这样改变选择

function setQuestionnaireChoises(prmData) {
  if (!(typeof prmData === 'object' || Array.isArray(prmData))) {
    return
  }
  if (prmData.choices) {
    prmData.choices = ['show', 'hide'];
  }
  Object.keys(prmData).forEach((key) => {
    setQuestionnaireChoises(prmData[key])
  });
}

setQuestionnaireChoises(foo);
console.log(JSON.stringify(foo))

JsBin 代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM