映射对象数组并根据值的计算添加属性

问题描述 投票:0回答:1

我有对象数组

const tableRows = [
  {
    id: "dba3d111",
    name : "Budget 1",
    dropdownOptions: [
      {
        "id": "UUID1",
        "type": "Expenditure: Administration",
        "name": "Office Supplies 1",
        "chosen": true
      },
      {
        "id": "UUID2",
        "type": "Expenditure: Administration",
        "name": "Office Supplies 2",
        "chosen": false
      },
       {
        "id": "UUID3",
        "type": "Expenditure: Administration",
        "name": "Office Supplies 3",
        "chosen": false
      },
      {
        "id": "UUID4",
        "type": "Liability Group",
        "name": "Vehicles 1",
        "chosen": false
      },
      {
        "id": "UUID5",
        "type": "Liability Group",
        "name": "Vehicles 2",
        "chosen": false
      },
      {
        "id": "UUID6",
        "type": "Liability Group",
        "name": "Vehicles 3",
        "chosen": false
      },
      {
        "id": "UUID7",
        "type": "Liability Group",
        "name": "Vehicles 4",
        "chosen": false
      }
    ]
  },
  {
    id: "dba3d222",
    name : "Budget 2",
    dropdownOptions: [
      {
        "id": "UUID1",
        "type": "Expenditure: Administration",
        "name": "Office Supplies 1",
        "chosen": false
      },
      {
        "id": "UUID2",
        "type": "Expenditure: Administration",
        "name": "Office Supplies 2",
        "chosen": true
      },
       {
        "id": "UUID3",
        "type": "Expenditure: Administration",
        "name": "Office Supplies 3",
        "chosen": false
      },
      {
        "id": "UUID4",
        "type": "Liability Group",
        "name": "Vehicles 1",
        "chosen": false
      },
      {
        "id": "UUID5",
        "type": "Liability Group",
        "name": "Vehicles 2",
        "chosen": false
      },
      {
        "id": "UUID6",
        "type": "Liability Group",
        "name": "Vehicles 3",
        "chosen": false
      },
      {
        "id": "UUID7",
        "type": "Liability Group",
        "name": "Vehicles 4",
        "chosen": false
      }
    ]
  },
  {
    id: "dba3d333",
    name : "Budget 3",
    dropdownOptions: [
      {
        "id": "UUID1",
        "type": "Expenditure: Administration",
        "name": "Office Supplies 1",
        "chosen": false
      },
      {
        "id": "UUID2",
        "type": "Expenditure: Administration",
        "name": "Office Supplies 2",
        "chosen": false
      },
       {
        "id": "UUID3",
        "type": "Expenditure: Administration",
        "name": "Office Supplies 3",
        "chosen": true
      },
      {
        "id": "UUID4",
        "type": "Liability Group",
        "name": "Vehicles 1",
        "chosen": false
      },
      {
        "id": "UUID5",
        "type": "Liability Group",
        "name": "Vehicles 2",
        "chosen": false
      },
      {
        "id": "UUID6",
        "type": "Liability Group",
        "name": "Vehicles 3",
        "chosen": false
      },
      {
        "id": "UUID7",
        "type": "Liability Group",
        "name": "Vehicles 4",
        "chosen": false
      }
    ]
  }
];

我需要实现以下目标: 计算所选选项的数量,如果每种类型的每个选项至少被选择一次,我需要向名为

disableType: true
的选项添加属性。对于其余选项类型,需要添加
disableType: false

所以最终输出如下:

const tableRows = [
      {
        id: "dba3d111",
        name : "Budget 1",
        dropdownOptions: [
          {
            "id": "UUID1",
            "type": "Expenditure: Administration",
            "name": "Office Supplies 1",
            "chosen": true,
            "disableType": true,
          },
          {
            "id": "UUID2",
            "type": "Expenditure: Administration",
            "name": "Office Supplies 2",
            "chosen": false,
            "disableType": true
          },
           {
            "id": "UUID3",
            "type": "Expenditure: Administration",
            "name": "Office Supplies 3",
            "chosen": false,
            "disableType": true
          },
          {
            "id": "UUID4",
            "type": "Liability Group",
            "name": "Vehicles 1",
            "chosen": false,
            "disableType": false
          },
          {
            "id": "UUID5",
            "type": "Liability Group",
            "name": "Vehicles 2",
            "chosen": false,
            "disableType": false
          },
          {
            "id": "UUID6",
            "type": "Liability Group",
            "name": "Vehicles 3",
            "chosen": false,
            "disableType": false
          },
          {
            "id": "UUID7",
            "type": "Liability Group",
            "name": "Vehicles 4",
            "chosen": false,
            "disableType": false
          }
        ]
      },
      {
        id: "dba3d222",
        name : "Budget 2",
        dropdownOptions: [
          {
            "id": "UUID1",
            "type": "Expenditure: Administration",
            "name": "Office Supplies 1",
            "chosen": false,
            "disableType": true,
          },
          {
            "id": "UUID2",
            "type": "Expenditure: Administration",
            "name": "Office Supplies 2",
            "chosen": true,
            "disableType": true,
          },
           {
            "id": "UUID3",
            "type": "Expenditure: Administration",
            "name": "Office Supplies 3",
            "chosen": false,
            "disableType": true,
          },
          {
            "id": "UUID4",
            "type": "Liability Group",
            "name": "Vehicles 1",
            "chosen": false,
            "disableType": false
          },
          {
            "id": "UUID5",
            "type": "Liability Group",
            "name": "Vehicles 2",
            "chosen": false,
            "disableType": false
          },
          {
            "id": "UUID6",
            "type": "Liability Group",
            "name": "Vehicles 3",
            "chosen": false,
            "disableType": false
          },
          {
            "id": "UUID7",
            "type": "Liability Group",
            "name": "Vehicles 4",
            "chosen": false,
            "disableType": false
          }
        ]
      },
      {
        id: "dba3d333",
        name : "Budget 3",
        dropdownOptions: [
          {
            "id": "UUID1",
            "type": "Expenditure: Administration",
            "name": "Office Supplies 1",
            "chosen": false,
            "disableType": true,
          },
          {
            "id": "UUID2",
            "type": "Expenditure: Administration",
            "name": "Office Supplies 2",
            "chosen": false,
            "disableType": true,
          },
           {
            "id": "UUID3",
            "type": "Expenditure: Administration",
            "name": "Office Supplies 3",
            "chosen": true,
            "disableType": true,
          },
          {
            "id": "UUID4",
            "type": "Liability Group",
            "name": "Vehicles 1",
            "chosen": false,
            "disableType": false
          },
          {
            "id": "UUID5",
            "type": "Liability Group",
            "name": "Vehicles 2",
            "chosen": false,
            "disableType": false
          },
          {
            "id": "UUID6",
            "type": "Liability Group",
            "name": "Vehicles 3",
            "chosen": false,
            "disableType": false
          },
          {
            "id": "UUID7",
            "type": "Liability Group",
            "name": "Vehicles 4",
            "chosen": false,
            "disableType": false
          }
        ]
      }
    ]

请注意,每种类型的每个选项只能选择一次,并且每种类型的所有多个选项都可以在同一行中选择,例如

[
      {
        "id": "UUID1",
        "type": "Expenditure: Administration",
        "name": "Office Supplies 1",
        "chosen": true
      },
      {
        "id": "UUID2",
        "type": "Expenditure: Administration",
        "name": "Office Supplies 2",
        "chosen": true
      },
       {
        "id": "UUID3",
        "type": "Expenditure: Administration",
        "name": "Office Supplies 3",
        "chosen": true
      },
]

到目前为止,我可以计算每组中的选项数量

const optionsCounter = {};
const selectedOptionsCounter = {};

tableRows[0].dropdownOptions.forEach((opt) => {
      optionsCounter[opt.type] = (optionsCounter[opt.type] || 0) + 1;
    });

tableRows.forEach((row) => {
      row.dropdownOptions.forEach((opt) => {
        if(opt.chosen === true) {
          selectedOptionsCounter[opt.type] = (selectedOptionsCounter[opt.type] || 0) + 1;
        }
        
      })
    })

现在我需要比较

optionsCounter
selectedOptionsCounter
对象的值,如果对象值为 ,则将
disableType: true
分配给相应的类型,而对于其他类型,则将
disableType: false
分配给相应的类型。

目前的计算是:

optionsCounter = {
 "Expenditure: Administration": 3,
  "Liability Group": 4
}

selectedOptionsCounter = {
 "Expenditure: Administration": 3
}

有道理,但我不知道下一步该做什么来解决我的问题

javascript arrays javascript-objects
1个回答
0
投票

对所有

drowDownOptions
使用另一个嵌套循环,比较相应的
optionsCounter
selectedOptionsCounter
条目。

tableRow.forEach(row => 
    row.dropDownOptions.forEach(opt => 
        opt.disableType = (optionsCounter[opt.type] == selectedOptionsCounter[opt.type]));
© www.soinside.com 2019 - 2024. All rights reserved.