【发布时间】:2017-07-28 20:57:31
【问题描述】:
我有一个二维数组,如下所示:
let electionResultsData = [
["VVD", "vvd", 20.5, 2504948],
["PVDA", "pvda", 19.6, 2340750],
["PVV", "pvv", 15.4, 950263],
["CDA", "cda", 13.6, 801620],
["SP", "sp", 9.8, 909853],
["D66", "d66", 6.9, 757091],
["GL", "gl", 6.7, 219896],
["CU", "cu", 3.2, 294586],
["SGP", "sgp", 1.7, 196780],
["PVDD", "pvdd", 1.3, 182162],
["50PLUS", "50plus", 0.9, 177631],
["OVERIG", "overig", 0.2, 51463],
["PIRATEN", "piraten", 0.1, 30600],
["LP", "lp", 0.1, 3335],
["PVDM", "pvdm", 0.1, 3257],
["JEZUSLFT", "jezuslft", 0, 0],
["ONDRNMR", "ondrnmr", 0, 0],
["LOKAAL", "lokaal", 0, 0],
["ARTIKEL1", "artikel1", 0, 0],
["GEENPEIL", "geenpeil", 0, 0],
["VRIJP", "vrijp", 0, 0],
["BURGBEW", "burgbew", 0, 0],
["FVD", "fvd", 0, 0],
["VDP", "vdp", 0, 0],
["NIEUWEW", "nieuwew", 0, 0],
["DENK", "denk", 0, 0],
["STEMNL", "stemnl", 0, 0],
["VNL", "vnl", 0, 0]
]
每个数组的第一个值是政党的大写名称,第二个值是小写名称,第三个值是得票百分比,第四个值是得票数。仅供参考,这些是荷兰政党。
我现在要做的是建立一个系统来计算可能的联盟。只有政党在议会中获得超过 75 个(至少 76 个)席位,才能实现政党之间的联盟。我用这段代码做了一个循环来遍历上面的数组:
/**
* Form coalitions of not more than six parties that exceed 75 parliament seats
*/
formCoalitions(electionResultsData) {
let coalitions = [];
let maxNumberOfCoalitionParties = 6;
// Main loop to check all possible coalitions (28 parties * 28 = 784)
for (let i = 0; i < 784; i ++) {
let coalitionSeats = 0;
let partySeats = 0;
let coalitionParties = [];
let coalition = [];
// The inner loop to generate a combination/coalition
for (let i = 0; i < electionResultsData.length; i++) {
// Check if a coalition has formed yet
if (coalitionSeats < 76) {
partySeats = (150 / 100) * electionResultsData[i][2];
coalitionSeats += partySeats;
coalitionParties.push(electionResultsData[i][0]);
// If coalition has formed
if (coalitionSeats > 75) {
// Push data into a second dimension coalition array
coalition[0] = parseInt(coalitionSeats);
coalition[1] = coalitionParties;
// Check if the generated coalition array already exists
let coalitionsStringified = JSON.stringify(coalitions);
let coalitionStringified = JSON.stringify(coalition);
let coalitionExists = coalitionsStringified.indexOf(coalitionStringified);
if (coalitionExists === -1) {
coalitions.push(coalition);
}
}
}
}
}
// Loop through the coalitions (the charts will be drawn here)
for (let i = 0; i < coalitions.length; i++) {
console.log(coalitions[i]);
}
}
问题是,这段代码只生成一个可能的联盟,而不是所有可能的联盟。我需要以某种方式存储已生成的组合并再次运行循环而不生成相同的联盟。循环必须继续这样做,直到所有可能的不超过六个政党的联盟都已生成。之后,循环就可以停止了。
解决这个问题的最佳方法是什么?
【问题讨论】:
-
有一点intricate system 可以将席位分配给各方。你想加入这个吗?您现在似乎在使用小数席位。
-
不一定要合并。我解释它的方式就是我被告知如何制作它的方式(:
-
请不要转发您的问题;我们的社区经常认为这是在纠缠。我们现在必须将您的帖子作为副本关闭,多个已关闭的问题可能会导致问题被禁止。如果您想提请注意您的问题,请参阅Getting attention for unanswered questions?
-
请不要将问题编辑为与您的其他问题相同。答案取决于您最初提出问题的方式
-
现在你可以更新数据了... ;)
标签: javascript arrays