我有对象数组
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
}
有道理,但我不知道下一步该做什么来解决我的问题
对所有
drowDownOptions
使用另一个嵌套循环,比较相应的 optionsCounter
和 selectedOptionsCounter
条目。
tableRow.forEach(row =>
row.dropDownOptions.forEach(opt =>
opt.disableType = (optionsCounter[opt.type] == selectedOptionsCounter[opt.type]));