El siguiente código toma la entrada con un comando y luego lo agrega a la matriz. El resultado debería mostrar el historial como si siguiera escribiendo y lo agregara. Me encontré con un problema en el que su coma adicional aparece justo después de Hey en la tercera iteración de la matriz y no estoy 100% seguro de por qué sucede eso. Pude eliminar algunas de las comas inferiores reemplazándolas, pero no estoy seguro. ese enfoque correcto en este caso.
class TextEditor { constructor(input) { this.input = input; this.output = []; this.history = []; this.forUndo = []; this.select = []; } textEditor() { let sortedInstructions = this.input.sort((a, b) => a[0] - b[0]); for (let instructor of sortedInstructions) { // Append if (instructor[0] === "APPEND") { if (this.select.length && this.output.length > 0) { let last = this.output.pop(); let newLast = last.slice(0, this.select[0]) + instructor[1] + last.slice(this.select[1]); this.output.push(newLast); } else { this.output.push(this.history + instructor[1]); this.forUndo.push(instructor[1], "APPEND"); this.history.push(instructor[1]); } } return this. output; } } } let input = [["APPEND", "Hey"], ["APPEND", " you"], ["APPEND", ", don't"], ["APPEND", " "], ["APPEND", "let me down"]]; let t = new TextEditor(input); console.log(t.textEditor()); let input = [["APPEND", "Hey"], ["APPEND", " you"], ["APPEND", ", don't"], ["APPEND", " "], ["APPEND", "let me down"]]; let t = new TextEditor(input); console.log(t.textEditor());producción:
[ 'Hey', 'Hey you', "Hey, you, don't", "Hey, you,, don't ", "Hey, you,, don't, let me down" ]Esperado:
[ 'Hey', 'Hey you', "Hey you, don't", "Hey you, don't ", "Hey you, don't let me down" ]class TextEditor { constructor(input) { this.input = input; this.output = []; this.history = []; this.forUndo = []; this.select = []; } textEditor() { let sortedInstructions = this.input.sort((a, b) => a[0] - b[0]); for (let instructor of sortedInstructions) { // Append if (instructor[0] === "APPEND") { if (this.select.length && this.output.length > 0) { /* let last = this.output.pop(); let newLast = last.slice(0, this.select[0]) + instructor[1] + last.slice(this.select[1]); this.output.push(newLast); */ } else { this.output.push(this.history.join("") + instructor[1]); this.forUndo.push(instructor[1], "APPEND"); this.history.push(instructor[1]); } } } return this.output; } } let input = [["APPEND", "Hey"], ["APPEND", " you"], ["APPEND", ", don't"], ["APPEND", " "], ["APPEND", "let me down"]]; let t = new TextEditor(input); console.log(t.textEditor()); Solo join a tu history :)