Soy bastante nuevo en JavaScript y estoy tratando de implementar mi código en pseudocódigo en JavaScript, sin embargo, no obtengo el resultado que se supone que debo obtener. Quiero que la función permute los elementos de la matriz p lugares a la izquierda. En pseudocódigo, estoy usando una estructura de datos de cola, pero pensé que también podía usar una matriz. Como resultado de mi función, obtengo una matriz con [2, 2, 2, 2]. ¿Puedes ayudarme?
Mi código en pseudocódigo :
Function PERMUTEVECTOR(row, p) If p=0 then Return row End if New Queue q For 0<= i <4 do ENQUEUE[row[i], q] End for For 1<= i <= p do ENQUEUE[HEAD[q],q] DEQUEUE[q] End for For 0<=i<4 do Row[i] <- HEAD[q] DEQUEUE[q] End for Return row End functionMi código en JavaScript :
function permute_vector(row, p) { if (p=0) {return row} let q = new Array() for (i=0; i<4; i++) { q.push(row[i]) } for (i=0; i<p; i++) { q.push(q[0]) q.pop() } for (i=0; i<4; i++) { row[i] = q[0] q.pop() } return row } px = permute_vector([2,4,1,3], 1) console.log("px is:", px) }Hice lo mismo en Python y funciona bien:
def permute_vector(row, p): if p==0: return row q = [] for i in range(4): q.append(row[i]) for i in range(p): q.append(q[0]) q.pop(0) for i in range(4): row[i] = q[0] q.pop(0) return row¿Qué estoy haciendo mal con mi código JavaScript ?
¡Muchas gracias!
En javascript, Array.pop() elimina el último elemento. Necesita Array.shift() para eliminar el primero.
function permute_vector(row, p) { if (p===0) // in js, checks are with == (loose) or === (strict). // = is for assignment and you were assigning p to 0 here. {return row} let q = new Array() for (i=0; i<4; i++) { q.push(row[i]) } for (i=0; i<p; i++) { q.push(q[0]) q.shift() // shift instead of pop } for (i=0; i<4; i++) { row[i] = q[0] q.shift() // shift instead of pop } return row } px = permute_vector([2,4,1,3], 1) console.log("px is:", px) }Dos errores:
pop() acepta un índice para eliminar un elemento específico. Estás haciendo uso de eso para eliminar el primer elemento. En JavaScript Array.pop() simplemente es capaz de eliminar el último elemento. Use Array.shift() para eliminar el primer elemento.Código de trabajo:
function permute_vector(row, p) { if (p === 0) { return row; } let q = new Array(); for (i = 0; i < 4; i++) { q.push(row[i]); } for (i = 0; i < p; i++) { q.push(q[0]); q.shift(); } for (i = 0; i < 4; i++) { row[i] = q[0]; q.shift(); } return row; } px = permute_vector([2, 4, 1, 3], 1); console.log("px is:", px);Ahora, cuando lo tengas, puedes deshacerte de todo y reemplazarlo con
vec[n:] + vec[:n] (Python) [...vec.slice(n), ...vec.slice(0, n)] (JS)Los algoritmos básicos de los libros de texto rara vez son útiles en los lenguajes de secuencias de comandos, porque implementan cosas como esta de forma inmediata.