首页 > 解决方案 > 对象有许多数组,遍历每个数组并更改一些值

问题描述

我有一个具有大量数组和属性的对象。有一个名为的属性targetProperty出现在对象的各个位置。

我有一个功能,如果用户单击“是”,则该属性的每个实例都需要重新分配给一个新值。

问题是我用于分配新值的函数在此场景中不起作用:

        reassingPropertyInObj(obj, status) {
            if (typeof obj === 'object' && obj !== null) {
                obj.targetProperty = status;
                for (const key in obj) {
                    this.handleExpandCollapseClick(obj[key], status);
                }
            }
        },

有人对此有解决方案吗?也不能使用 JSON.parse() 或类似的东西,因为如果用户需要,属性需要保持反应性以便以后重新分配。

下面是一个对象的示例:

    {
      "id": 16,
      "ref_study_id": "3412333",
      "title": "SomePersonNameOne",
      "capabilities_available": [
        {
          "id": 75,
          "name": "Clinical Data",
        },
        {
          "id": 538,
          "name": "RK's Capability",
        }
      ],
      "capabilities_impacted": [],
      "businessImpact": {
        "id": 2,
        "name": "Medium"
      },
      "sites_impacted": [],
      "sites_available": []
    },
    {
      "id": 6,
      "ref_study_id": "123124",
      "title": null,
      "capabilities_available": [
        {
          "id": 37,
          "name": "Clinical Site Experience,
        },
        {
          "id": 41,
          "name": "Experience",
        }
      ],
      "capabilities_impacted": [
        {
          "id": 37,
          "name": "Information Exchange",
          "is_study_level": false,
          "businessImpact": {
            "id": 2,
            "name": "Medium"
          }
        },
        {
          "id": 39,
          "name": "IT/Data Experience",
          "is_study_level": false,
          "businessImpact": {
            "id": 2,
            "name": "Medium"
          }
        },
        {
          "id": 34,
          "name": "Mgmt & Storage",
          "is_study_level": false,
          "businessImpact": {
            "id": 3,
            "name": "Minor"
          }
        }
      ],
      "businessImpact": {
        "id": 2,
        "name": "Medium"
      },
      "sites_impacted": [],
      "sites_available": []
    },

有问题的财产是businessImpact。正如您所看到的,它本身作为属性出现在数组内部(有时是它们自己的数组数组)。

我设置了一个功能,例如:

                    arrayOfProperties.forEach((property) => { 
                           obj[property].forEach((o) => { 
                               o.businessImpact = newVal; 
                           });
                        });

但当然它还不够深入。

标签: javascript

解决方案


推荐阅读