units2016 = {
let units = [];
let ui = 0;
let dems = states
.filter(
d => d[2016].electoral_D > 0 && statesReporting2016.indexOf(d.state) >= 0
)
.sort((a, b) => {
return leanScale(a.state) - leanScale(b.state);
});
let reps = states
.filter(
d => d[2016].electoral_R > 0 && statesReporting2016.indexOf(d.state) >= 0
)
.sort((a, b) => {
return leanScale(a.state) - leanScale(b.state);
});
let unknowns = states
.filter(
d =>
d[2016].electoral_D + d[2016].electoral_R < d.votes ||
statesReporting2016.indexOf(d.state) < 0
)
.sort((a, b) => {
return leanScale(a.state) - leanScale(b.state);
});
dems.forEach(d => {
d3.range(d[2016].electoral_D).forEach(i => {
units.push({
...d,
D: 1,
i,
ui: ui++,
color: blue
});
});
});
ui++;
unknowns.forEach(d => {
let votes = d.votes;
if (statesReporting2016.indexOf(d.state) >= 0) {
votes = d.votes - (d[2016].electoral_D + d[2016].electoral_R);
}
d3.range(votes).forEach(i => {
units.push({
...d,
i,
ui: ui++,
color: gray
});
});
});
ui++;
reps.forEach(d => {
d3.range(d[2016].electoral_R).forEach(i => {
units.push({
...d,
R: 1,
i,
ui: ui++,
color: red
});
});
});
return units;
}