Entonces, estaba haciendo un lenguaje de programación de juguetes en JS y me encontré con un problema... a saber, en las etiquetas. Según mi idea, todo lo que viene después de la etiqueta se ingresa en el objeto y luego se ejecuta cuando es necesario el código:
var OBJcode = {} labels = {} code = `zhopa: i am string i am string i am string i am string` CodeLine = code.split("\n") for (var i = 0; i < CodeLine.length; i++) { runCode = CodeLine[i].split(" ") OBJcode[i] = runCode label = runCode[0] instruction = CodeLine[1] src = runCode[2] dst = runCode[3] if (`${dst}` == "undefined") { dst = src src = instruction instruction = label } if (label.endsWith(":")) labels[label.slice(0, -1)] += CodeLine[i + 1].split(" ").join(" ") } console.log(code) console.log(OBJcode) console.log(labels)producción:
zhopa: i am string i am string i am string i am string { '0': ['zhopa:', 'i', 'am', 'string'], '1': ['i', 'am', 'string'], '2': ['i', 'am', 'string'], '3': ['i', 'am', 'string'] } { zhopa: 'undefinedi am string' }¿Y cómo agregar las siguientes líneas a las etiquetas [etiqueta]?
lo mas probable es que el problema sea a las 21:56
La primera vez que lo haces
labels[label.slice(0, -1)] += CodeLine[i + 1].split(" ").join(" ") el objeto de labels está vacío, por lo que labels[label.slice(0, -1)] no están definidas. Cuando se concatena con esto, convierte el valor indefinido en la cadena "undefined" y luego CodeLine[i + 1].split(" ").join(" ") se agrega a esto. Entonces obtienes undefined al comienzo del resultado.
Debe verificar si la propiedad del objeto existe o no antes de concatenar.
var OBJcode = {} labels = {} code = `zhopa: i am string i am string i am string i am string` CodeLine = code.split("\n") for (var i = 0; i < CodeLine.length; i++) { runCode = CodeLine[i].split(" ") OBJcode[i] = runCode label = runCode[0] instruction = CodeLine[1] src = runCode[2] dst = runCode[3] if (`${dst}` == "undefined") { dst = src src = instruction instruction = label } if (label.endsWith(":")) { let key = label.slice(0, -1); let value = CodeLine[i + 1].split(" ").join(" "); if (labels[key]) { labels[key] += value; } else { labels[key] = value; } } } console.log(code) console.log(OBJcode) console.log(labels)