我有一个二维数组,如下所示:与Javascript数组创建联盟组合
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]);
}
}
的问题是,此代码仅生成一个可能的联盟,而不是所有可能的联盟。我需要以某种方式存储已经生成的组合,并再次运行循环而不生成相同的联盟。循环必须继续这样做,直到所有可能的不超过六方的联盟产生。之后,循环可以停止。
解决此问题的最佳方法是什么?
有一个[复杂的系统]的比特(https://en.wikipedia.org/wiki/Elections_in_the_Netherlands#Seat_assignment)来分发席位各方。你想纳入这个?你似乎现在与分数席位一起工作。 –
这并不需要合并。我解释的方式是我被告知如何制作它的方式(: –
)请不要重新发布您的问题,我们的社区经常认为这是不好的现象,现在我们必须将您的帖子视为重复,并且如果您想提请注意您的问题,请参阅[获取关于未解答问题的注意事项?](https://meta.stackexchange.com/q/7046) –