JSFiddle - React, Tailwind, and code Playground

by Jeff Santos

HTML

<div id="output" />

JavaScript

function Node(id, value) {
  this.id = id;
  this.content = value;
  this.edges = [];

  this.addEdge = function(xNode, cost) {
    this.edges.push({
      "node": xNode,
      "cost": cost
    });
  }

  this.toString = function() {
    return this.content + " (" + this.edges.map(function(item) {
      return item.node.content
    }).sort().join(", ") + ")";
  }

}

function Graph() {
  this.idCount = 0;
  this.nodes = {};

  this.add = function(value) {
    var newNode = new Node(this.idCount, value);
    this.nodes[newNode.id] = newNode;
    this.idCount++;
    return newNode;
  }

  this.join = function(n1, n2, cost) {
    n1.addEdge(n2, cost);
    n2.addEdge(n1, cost);
  }

  this.toString = function() {
    var strAry = [];
    for (var key in this.nodes) {
      strAry.push(this.nodes[key].toString());
    }
    return strAry.sort(cSort).sort(sort).join("\n");
  }
}

function sort(x, y) {
  var atom = ["O", "H", "N", "C"];
  var xn = atom.indexOf(x[0]);
  var yn = atom.indexOf(y[0]);
  return (xn < yn) ? -1 : (xn > yn) ? 1 : 0;
}

// Sort function came from http://mozgovipc.blogspot.com/2010/11/jquery-javascript-how-to-sort-string.html
// this makes everything nice and tidey
function cSort(x, y) {
  if (x.length != y.length) {
    return x.length - y.length;
  }
  return (x < y) ? -1 : (x > y) ? 1 : 0;
}

var g = new Graph();
var h1 = g.add("H");
var h2 = g.add("H");
var h3 = g.add("H");
var h4 = g.add("H");
var h5 = g.add("H");
var h6 = g.add("H");
var h7 = g.add("H");
var h8 = g.add("H");
var h9 = g.add("H");
//var h10 = g.add("H");

var c1 = g.add("C");
var c2 = g.add("C");
var c3 = g.add("C");
var c4 = g.add("C");
var c5 = g.add("C");
var c6 = g.add("C");
var c7 = g.add("C");
var c8 = g.add("C");

var n1 = g.add("N");
var n2 = g.add("N");
var n3 = g.add("N");
var n4 = g.add("N");

var o1 = g.add("O");
var o2 = g.add("O");

g.join(c1, h1, 1);
g.join(c1, h2, 1);
g.join(c1, h3, 1);
g.join(c1, n1, 1);

g.join(c2, n1, 1);
g.join(c2, n2, 1);
g.join(c2, o1,...