entonces, he hecho uso de la API fetch para...
El archivo JSON: más o menos así: [["hello.css", "world.css", "why.css"], "doesn't.css", "this.css", "work.css"]
Las condiciones: si hay un gran grupo de cadenas en una matriz, dentro de la matriz, conviértalo en un <optgroup>.
Donde falla: en la Inicialización de la primera función forEach.
fetch('./themes.json').then(theResponse => { let themesJSON = theResponse.text(); console.log(themesJSON); /* All "console.log()" functions are for debugging purposes */ themesJSON.forEach(elm => { let the = ''; if (elm.length > 1) { let optgroup = document.createElement('optgroup'); elm.forEach(elm => { let opt = document.createElement('option'); opt.value = elm; opt.innerText = elm; optgroup.insertAdjacentElement('beforeend', opt); console.log(opt); }) the.insertAdjacentElement("beforeend", optgroup) console.log(optgroup); } else { let opt = document.createElement('option'); opt.value = elm; opt.innerText = elm; the.insertAdjacentElement('beforeend', opt); console.log(opt); } document.getElementById('themeSelection').insertAdjacentElement("beforeend", the); console.log(the); }); })Tu estas usando:
let themesJSON = theResponse.text();
que devuelve una promesa que se resuelve en una cadena.
Lo que necesita es una representación de JavaScript de su archivo JSON.
Para eso la sintaxis correcta sería así:
fetch('./themes.json') .then(theResponse => theResponse.json()) .then(actualArray => { console.log(actualArray) })