首页 > 解决方案 > 为对象中的多个数组分配相同的值

问题描述

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

这里是对象:

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: []

        },
        {

          id: 1,
          text: 'composit3',
          isDisabled: true,
          compositeConfig: []

        },
      ],
      id: 3576,
      tenantId: "1",
    },

  ]
}

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

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

标签: javascriptarraysangular

解决方案


那里没有神奇的方法。
你应该只写简单的递归。
像这样的东西应该可以工作(伪代码):

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;
}

推荐阅读