为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

米琪卡哇伊 2023-03-24 14:24:18
您好我正在尝试将单个值分配给单个对象中的多个动态数组和嵌套数组。这是这里的对象: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/pobject = {  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”,该值分配给所有数组以及内部或嵌套数组。如何为多个动态数组赋值,无论有多少数组或嵌套数组
查看完整描述

3 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

编辑:错过了问题中的“嵌套数组”部分。


试试这个:


function setProperty(object, key, value) {

  if(Array.isArray(object)){

    let newArray = [];

    object.forEach((obj, index) => {

      newArray.push(setProperty(obj, key, value));

    });

    return newArray;

  } else if(typeof object === 'object' && object != null) {

    object[key] = value;

    Object.entries(object).forEach(item => {

      if(Array.isArray(item[1])) {

        let listKey = item[0];

        let newList = setProperty(item[1], key, value);

        object[listKey] = newList;

      }

    });

    return object;

  }

}


用法


setProperty(object, "isDisabled", true);

setProperty(object, "isDisabled", false);

setProperty(object, "someKey", "Some Value");

运行以下代码片段进行演示


function setProperty(object, key, value) {

  if (Array.isArray(object)) {

    let newArray = [];

    object.forEach((obj, index) => {

      newArray.push(setProperty(obj, key, value));

    });

    return newArray;

  } else if (typeof object === 'object' && object != null) {

    object[key] = value;

    Object.entries(object).forEach(item => {

      if (Array.isArray(item[1])) {

        let listKey = item[0];

        let newList = setProperty(item[1], key, value);

        object[listKey] = newList;

      }

    });

    return object;

  }

}


function changeProp() {

  let 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",

      },


    ]

  };

  document.getElementById("old").innerHTML = JSON.stringify(object, null, 4);

  let name = document.getElementById("propertyName").value;

  if (name == null || name == "")

    name = "isDisabled"

  setProperty(object, name, true);

  document.getElementById("result").innerHTML = JSON.stringify(object, null, 4);

}

<div>

  <h3> Enter the name of the property and click on the <strong>Set Property</strong> button.<br/> Default name is <i>isDisabled</i></h3>

  <input type="text" id="propertyName" name="propertyName" placeholder="Property name" />

  <button onclick="changeProp();">Set Property</button>

  <h2>Object</h2>

  <pre id="old">

</pre>

  <br/>

  <h2>Updated</h2>

  <pre id="result">

</pre>

</div>


查看完整回答
反对 回复 2023-03-24
?
不负相思意

TA贡献1777条经验 获得超10个赞

object.metaForm.forEach(i => {

 i.isDisabled = true;

 if(i.AdditionalVal.length){

  i.AdditionalVal.forEach(v => {

    if.isDisabled = true;

  })

 }

});

object.tabData.forEach(i => {

 i.isDisabled = true;

 if(i.compositeFieldList.length){

  i.compositeFieldList.forEach(c => {

   c.isDisabled = true;

  }

 }

})


查看完整回答
反对 回复 2023-03-24
?
哔哔one

TA贡献1854条经验 获得超8个赞

那里没有神奇的方法。

你应该只写简单的递归。

这样的事情应该有效(伪代码):


function traverseAndSetDisabled(obj) {

  if(Array.isArray(obj)) {

    for(child in obj) obj[child] = traverseAndSetDisabled(child)

  } else {

    obj.isDisabled = true;

  }


  return obj;

}

[更新]

工作解决方案(结果与用户要求的结果 100% 相同)


function traverseAndSetDisabled(obj) {

  if(typeof obj === 'object') {

    for(const child in obj) obj[child] = traverseAndSetDisabled(obj[child])

    if(!Array.isArray(obj)) {

      obj.isDisabled = true;

    }

  }


  return obj;

}


查看完整回答
反对 回复 2023-03-24
  • 3 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信