为对象中的多个数组分配相同的值

您好我正在尝试将单个值分配给单个对象中的多个动态数组和嵌套数组。


这是这里的对象:


object = {

  metaForm: [{

      id: 1,

      text: 'abc',

      AdditionalVal: []

    },

    {

      id: 1,

      text: 'abc',

      AdditionalVal: [{

        id: 1,

        text: 'add',

        compositeConfig: []

      }, ]

    },

    {

      id: 1,

      text: 'abc',

      AdditionalVal: [{

        id: 1,

        text: '123',

        compositeConfig: [{


          id: 1,

          text: 'composit',

          compositeConfig: []


        }]

      }, ]

    }

  ],

  tabData: [{

      composite: false,

      compositeFieldList: [],

      id: 3576,

      tenantId: "1",

    },

    {

      composite: false,

      compositeFieldList: [{


          id: 1,

          text: 'composit2',

          compositeConfig: []


        },

        {


          id: 1,

          text: 'composit3',

          compositeConfig: []


        },

      ],

      id: 3576,

      tenantId: "1",

    },


  ]

}

下面是 o/p


object = {

  metaForm: [{

      id: 1,

      text: 'abc',

      AdditionalVal: [],

      isDisabled: true,

    },

    {

      id: 1,

      text: 'abc',

      isDisabled: true,

      AdditionalVal: [{

        id: 1,

        text: 'add',

        isDisabled: true,

        compositeConfig: []

      }, ]

    },

    {

      id: 1,

      text: 'abc',

      isDisabled: true,

      AdditionalVal: [{

        id: 1,

        text: '123',

        isDisabled: true,

        compositeConfig: [{


          id: 1,

          text: 'composit',

          isDisabled: true,

          compositeConfig: []


        }]

      }, ]

    }

  ],

  tabData: [{

      composite: false,

      compositeFieldList: [],

      id: 3576,

      isDisabled: true,

      tenantId: "1",

    },

    {

      composite: false,

      isDisabled: true,

      compositeFieldList: [{


          id: 1,

          text: 'composit2',

          isDisabled: true,

          compositeConfig: []


        }

      

在 Above 对象中,分配了一个新值“isDisabled: true”,该值分配给所有数组以及内部或嵌套数组。


如何为多个动态数组赋值,无论有多少数组或嵌套数组



米琪卡哇伊
浏览 78回答 3
3回答

慕姐8265434

编辑:错过了问题中的“嵌套数组”部分。试试这个:function setProperty(object, key, value) {&nbsp; if(Array.isArray(object)){&nbsp; &nbsp; let newArray = [];&nbsp; &nbsp; object.forEach((obj, index) => {&nbsp; &nbsp; &nbsp; newArray.push(setProperty(obj, key, value));&nbsp; &nbsp; });&nbsp; &nbsp; return newArray;&nbsp; } else if(typeof object === 'object' && object != null) {&nbsp; &nbsp; object[key] = value;&nbsp; &nbsp; Object.entries(object).forEach(item => {&nbsp; &nbsp; &nbsp; if(Array.isArray(item[1])) {&nbsp; &nbsp; &nbsp; &nbsp; let listKey = item[0];&nbsp; &nbsp; &nbsp; &nbsp; let newList = setProperty(item[1], key, value);&nbsp; &nbsp; &nbsp; &nbsp; object[listKey] = newList;&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });&nbsp; &nbsp; return object;&nbsp; }}用法setProperty(object, "isDisabled", true);setProperty(object, "isDisabled", false);setProperty(object, "someKey", "Some Value");运行以下代码片段进行演示function setProperty(object, key, value) {&nbsp; if (Array.isArray(object)) {&nbsp; &nbsp; let newArray = [];&nbsp; &nbsp; object.forEach((obj, index) => {&nbsp; &nbsp; &nbsp; newArray.push(setProperty(obj, key, value));&nbsp; &nbsp; });&nbsp; &nbsp; return newArray;&nbsp; } else if (typeof object === 'object' && object != null) {&nbsp; &nbsp; object[key] = value;&nbsp; &nbsp; Object.entries(object).forEach(item => {&nbsp; &nbsp; &nbsp; if (Array.isArray(item[1])) {&nbsp; &nbsp; &nbsp; &nbsp; let listKey = item[0];&nbsp; &nbsp; &nbsp; &nbsp; let newList = setProperty(item[1], key, value);&nbsp; &nbsp; &nbsp; &nbsp; object[listKey] = newList;&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });&nbsp; &nbsp; return object;&nbsp; }}function changeProp() {&nbsp; let object = {&nbsp; &nbsp; metaForm: [{&nbsp; &nbsp; &nbsp; &nbsp; id: 1,&nbsp; &nbsp; &nbsp; &nbsp; text: 'abc',&nbsp; &nbsp; &nbsp; &nbsp; AdditionalVal: []&nbsp; &nbsp; &nbsp; },&nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; id: 1,&nbsp; &nbsp; &nbsp; &nbsp; text: 'abc',&nbsp; &nbsp; &nbsp; &nbsp; AdditionalVal: [{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id: 1,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text: 'add',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; compositeConfig: []&nbsp; &nbsp; &nbsp; &nbsp; }, ]&nbsp; &nbsp; &nbsp; },&nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; id: 1,&nbsp; &nbsp; &nbsp; &nbsp; text: 'abc',&nbsp; &nbsp; &nbsp; &nbsp; AdditionalVal: [{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id: 1,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text: '123',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; compositeConfig: [{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id: 1,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text: 'composit',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; compositeConfig: []&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }]&nbsp; &nbsp; &nbsp; &nbsp; }, ]&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; ],&nbsp; &nbsp; tabData: [{&nbsp; &nbsp; &nbsp; &nbsp; composite: false,&nbsp; &nbsp; &nbsp; &nbsp; compositeFieldList: [],&nbsp; &nbsp; &nbsp; &nbsp; id: 3576,&nbsp; &nbsp; &nbsp; &nbsp; tenantId: "1",&nbsp; &nbsp; &nbsp; },&nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; composite: false,&nbsp; &nbsp; &nbsp; &nbsp; compositeFieldList: [{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id: 1,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text: 'composit2',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; compositeConfig: []&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id: 1,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text: 'composit3',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; compositeConfig: []&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },&nbsp; &nbsp; &nbsp; &nbsp; ],&nbsp; &nbsp; &nbsp; &nbsp; id: 3576,&nbsp; &nbsp; &nbsp; &nbsp; tenantId: "1",&nbsp; &nbsp; &nbsp; },&nbsp; &nbsp; ]&nbsp; };&nbsp; document.getElementById("old").innerHTML = JSON.stringify(object, null, 4);&nbsp; let name = document.getElementById("propertyName").value;&nbsp; if (name == null || name == "")&nbsp; &nbsp; name = "isDisabled"&nbsp; setProperty(object, name, true);&nbsp; document.getElementById("result").innerHTML = JSON.stringify(object, null, 4);}<div>&nbsp; <h3> Enter the name of the property and click on the <strong>Set Property</strong> button.<br/> Default name is <i>isDisabled</i></h3>&nbsp; <input type="text" id="propertyName" name="propertyName" placeholder="Property name" />&nbsp; <button onclick="changeProp();">Set Property</button>&nbsp; <h2>Object</h2>&nbsp; <pre id="old"></pre>&nbsp; <br/>&nbsp; <h2>Updated</h2>&nbsp; <pre id="result"></pre></div>

不负相思意

object.metaForm.forEach(i => {&nbsp;i.isDisabled = true;&nbsp;if(i.AdditionalVal.length){&nbsp; i.AdditionalVal.forEach(v => {&nbsp; &nbsp; if.isDisabled = true;&nbsp; })&nbsp;}});object.tabData.forEach(i => {&nbsp;i.isDisabled = true;&nbsp;if(i.compositeFieldList.length){&nbsp; i.compositeFieldList.forEach(c => {&nbsp; &nbsp;c.isDisabled = true;&nbsp; }&nbsp;}})

哔哔one

那里没有神奇的方法。你应该只写简单的递归。这样的事情应该有效(伪代码):function traverseAndSetDisabled(obj) {&nbsp; if(Array.isArray(obj)) {&nbsp; &nbsp; for(child in obj) obj[child] = traverseAndSetDisabled(child)&nbsp; } else {&nbsp; &nbsp; obj.isDisabled = true;&nbsp; }&nbsp; return obj;}[更新]工作解决方案(结果与用户要求的结果 100% 相同)function traverseAndSetDisabled(obj) {&nbsp; if(typeof obj === 'object') {&nbsp; &nbsp; for(const child in obj) obj[child] = traverseAndSetDisabled(obj[child])&nbsp; &nbsp; if(!Array.isArray(obj)) {&nbsp; &nbsp; &nbsp; obj.isDisabled = true;&nbsp; &nbsp; }&nbsp; }&nbsp; return obj;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript