CP Nest
by olymccollum
HTML
<script src="https://d3js.org/d3.v3.js"></script>
JavaScript
var workloads = [
{ name: 'vm001', cluster: 'c1', host: 'host1', application: ['app A', 'app B'] },
{ name: 'vm002', cluster: 'c1', host: 'host1', application: ['app C'] },
{ name: 'vm003', cluster: 'c1', host: 'host1', application: ['app D', 'app E'] },
{ name: 'vm004', cluster: 'c1', host: 'host1', application: ['app F'] },
{ name: 'vm005', cluster: 'c1', host: 'host1', application: ['app G'] },
{ name: 'vm006', cluster: 'c1', host: 'host1', application: ['app H'] },
{ name: 'vm007', cluster: 'c1', host: 'host2', application: ['app AA'] },
{ name: 'vm008', cluster: 'c1', host: 'host2', application: ['app AA'] },
{ name: 'vm009', cluster: 'c1', host: 'host2', application: ['app AA'] },
{ name: 'vm010', cluster: 'c1', host: 'host2', application: ['app AA'] },
{ name: 'vm011', cluster: 'c2', host: 'host3', application: ['app BB'] },
{ name: 'vm012', cluster: 'c2', host: 'host3', application: ['app CC'] },
{ name: 'vm013', cluster: 'c2', host: 'host3', application: ['app DD', 'app EE'] },
{ name: 'vm014', cluster: 'c2', host: 'host3', application: ['app DD', 'app EE'] },
{ name: 'vm015', cluster: 'c2', host: 'host3', application: ['app DD', 'app EE'] }
];
console.log(workloads);
var cp = {};
cp.nest = function() {
var nest = {},
keys = [];
function map(mapType, array, depth) {
if (depth >= keys.length) return rollup
? rollup.call(nest, array) : (sortValues
? array.sort(sortValues)
: array);
var i = -1,
n = array.length,
key = keys[depth++],
keyValue,
object,
setter,
valuesByKey = new d3_Map,
values;
while (++i < n) {
if (values = valuesByKey.get(keyValue = key(object = array[i]))) {
values.push(object);
} else {
valuesByKey.set(keyValue, [object]);
}
}
if (mapType) {
object = mapType();
setter = function(keyValue, values) {
object.set(keyValue, map(mapType, values, depth));
};
}...