//these are the arrays for consonants var CONSONANTS = [ ["b", "bb"], ["d", "dd", "ed"], ["f", "ff", "ph", "gh", "lf", "ft"], ["g", "gg", "gh", "gu", "gue"], ["h", "wh"], ["j", "ge", "g", "dge", "di", "gg"], ["k", "c", "ch", "cc", "lk", "qu" , "q", "ck", "x"], ["l", "ll"], ["m", "mm", "mb", "mn", "lm"], ["n", "nn", "kn", "gn", "pn"], ["p", "pp"], ["r", "rr", "wr", "rh"], ["s", "ss", "c", "sc", "ps", "st", "ce", "se"], ["t", "tt", "th", "ed"], ["v", "f", "ph", "ve"], ["w", "wh", "u", "o"], ["y", "i", "j"], ["z", "zz", "s", "ss", "x", "ze", "se"] ]; //these are the vowel arrays var VOWELS = [ ["a", "ai", "au"], [ "a", "ai", "eigh", "aigh", "ay", "er", "et", "ei", "au", "ae", "ea", "ey"], ["e", "ea", "u", "ie", "ai", "a", "eo", "ei", "ae", "ay"], ["e", "ee", "ea", "y", "ey", "oe", "ie", "i", "ei", "eo", "ay"], ["i", "e", "o", "u", "ui", "y", "ie"], ["i", "y", "igh", "ie", "uy", "ye", "ai", "is", "eigh", "i_e"], ["o", "a", "ho", "au", "aw", "ough"], ["o", "oa", "oe", "ow", "ough", "eau", "oo", "ew"], ["o", "oo", "u", "ou"], ["u", "o", "oo", "ou"], ["o", "oo", "ew", "ue", "oe", "ough", "ui", "oew", "ou"], ["u", "ew", "iew", "yu", "ul", "eue", "eau", "ieu", "eu"], ["oi", "oy", "uoy"], ["ow", "ou", "ough"], ["a", "er", "i", "ar", "our", "or", "e", "ur", "re", "eur"] ]; //these are the rhotic vowel cluster arrays var RHOTIC_CLUSTERS = [ ["air", "are", "ear", "ere", "eir", "ayer"], ["a", "ar", "au", "er", "ear"], ["ir", "er", "ur", "ear", "or", "our", "yr"], ["aw", "a", "or", "oor", "ore", "oar", "our", "augh", "ar", "ough", "au"], ["ear", "eer", "ere", "ier"], ["ure", "our"] ]; //these are the digraph arrays var DIGRAPHS = [ ["s", "si", "z"], ["ch", "tch", "tu", "ti", "te"], ["sh", "ce", "s", "ci", "si", "ch", "sci", "ti"], ["th"], ["ng", "n", "ngue"] ]; var PHONEMES = [ CONSONANTS, DIGRAPHS, VOWELS, RHOTIC_CLUSTERS ]; var characters = Math.floor((Math.random() * 6) + 1) + Math.floor((Math.random() * 4) + 1) + 2; var charname = []; var CLUSTER = []; var GROUP = []; var GRAPHEME_CLUSTER = []; var LEX_UNIT = []; var COUNTER = []; var charlength = [] for (var i = 0; i < characters; i++) { if (i === 0){ var CLUSTER = Math.floor((Math.random() * 4)); var GROUP = PHONEMES[CLUSTER]; var GRAPHEME_COUNTER = Math.floor((Math.random() * GROUP.length)); var GRAPHEME_CLUSTER = GROUP[GRAPHEME_COUNTER]; var LEX_UNIT = GRAPHEME_CLUSTER[0]; charname.push(LEX_UNIT); charlength = charname.join(""); var i = ((charlength.length) + 1); console.log(CLUSTER) if (CLUSTER > 1 ){ var COUNTER = 1 } else { var COUNTER = 0 } } else { if (COUNTER > 0 ){ var CLUSTER = Math.floor((Math.random() * 1)); var GROUP = PHONEMES[CLUSTER]; var GRAPHEME_COUNTER = Math.floor((Math.random() * GROUP.length)); var GRAPHEME_CLUSTER = GROUP[GRAPHEME_COUNTER]; var LEX_NUMBER = Math.floor((Math.random() * GRAPHEME_CLUSTER.length)); var LEX_UNIT = GRAPHEME_CLUSTER[LEX_NUMBER]; charname.push(LEX_UNIT); var COUNTER = 0; charlength = charname.join(""); var i = ((charlength.length) + 1); } else { var CLUSTER = Math.floor((Math.random() * 1) + 2); var GROUP = PHONEMES[CLUSTER]; var GRAPHEME_COUNTER = Math.floor((Math.random() * GROUP.length)); var GRAPHEME_CLUSTER = GROUP[GRAPHEME_COUNTER]; var LEX_NUMBER = Math.floor((Math.random() * GRAPHEME_CLUSTER.length)); var LEX_UNIT = GRAPHEME_CLUSTER[LEX_NUMBER]; charname.push(LEX_UNIT); var COUNTER = 1; charlength = charname.join(""); var i = ((charlength.length) + 1); } } } charname=charname.join(""); console.log(charname)