Estoy en Vue.js y trato de corregir el valor de entrada de cantidad inapropiado como "12jd" . Pertenecen a objetos de elementos que se encuentran en un literal de matriz llamado almacén (que se define en el retorno de datos ( )). El código problemático está en la función del controlador de eventos de entrada que obtiene el índice del elemento - idx en el que se escribió la cantidad incorrecta.
Todo va bien hasta que intento asignar la matriz adecuada, sin cantidad incorrecta, a la tienda original en este contexto. Esta parte no funciona, no se cambia ningún valor en el original.
failed(idx) { const storeCopy = lodash.cloneDeep(this.store); //deep copy the store literal const unmodified = storeCopy.filter((item) => item.id !== idx); const modified = storeCopy.filter((item) => item.id === idx)[0]; //slice out the relevant part const modifiedCopy = JSON.parse(JSON.stringify(modified)); //deep copy the item object const input = parseInt((" " + modifiedCopy.quantity).slice(1)); //get parsed input from deep copied string const store = [ Object.defineProperty(modifiedCopy, "quantity", { value: isNaN(input) ? 0 : input, }), ...unmodified, ]; //correct the input and put it back to the array console.log(store); this.store.length = 0; //from this it's messed up this.store = store; }Hago una copia profunda incluso tres veces, aún así el problema se retropropaga a la matriz registrada en la consola después de descomentar las dos últimas líneas. Sin ellos está bien.
¿Por qué la referencia no se recolecta como basura después de establecer this.store.length en 0, o this.store en []? ¿Qué me pierdo, tal vez quede alguna referencia original en la nueva matriz? ¡Cualquier ayuda apreciada! Gracias
editado
Aquí está la salida sin entonces con las dos últimas líneas:
Ni siquiera entiendo quién es posible que la tienda en el ámbito local se vea afectada al revés, al insertar esas dos líneas. De todos modos, se restaura de alguna manera al valor incorrecto "12jd".
Incluso el registro se ve diferente, tengo que hacer clic en los tres puntos para revelar los valores.