Tengo un formulario que consta de una matriz de campos de entrada.
¿Hay alguna forma de verificar las entradas en cada fila y verificar si tienen al menos un valor único en cualquier campo para que no haya filas idénticas?
Por ejemplo, la segunda fila solo puede tener 3 de 4 campos con valores exactos similares a los de la primera fila, como máximo.
<form> <div> <table> <tr v-for="(item, i) of items" :key="i"> <td> <input type="date" :id="'date-' + i"> </td> <td> <input type="text" :id="'project_id-' + i"> </td> <td> <input type="text" :id="'hours-' + i"> </td> <td> <input type="text" :id="'description-' + i"> </td> </tr> <tr> <td> <button type="button" @click="itemCount++">Add Row</button> </td> </tr> </table> </div> <div> <button type="button" v-on:click="submit()"> </div> </form>
Me encontré con una técnica que usa una validación distinct
pero no estoy seguro de su practicidad además de la sintaxis y el flujo correctos.
En la función de submit()
, convierta la matriz de items
en un Set
para eliminar los valores redundantes. A continuación, vuelva a convertir a Array
nuevamente para poder comparar las dos matrices por su length
. Si las longitudes son diferentes, significa que existen valores redundantes.
submit() { const arr = this.items var obj = arr.map(JSON.stringify) var set = new Set(obj) var unique = Array.from(set).map(JSON.parse) console.log(obj, set, unique); if(obj.length != unique.length) { alert("Error: Redundant inputs!") } else { // submit the form }; }
PASOS :
Primero, convierta cada objeto de la matriz arr
en una cadena codificada en JSON utilizando el método JSON.stringify
.
En segundo lugar, asigne la cadena codificada JSON a una nueva matriz obj
utilizando el método map()
.
En tercer lugar, cree un nuevo set
pasando la matriz obj
al constructor del nuevo conjunto para eliminar todos los elementos duplicados.
Este set
solo contendrá los valores que son únicos de la matriz.
Luego, convierta el conjunto a otra matriz unique
usando el método from()
pasando el set
como un parámetro.
Esta nueva matriz no tendrá objetos redundantes de la matriz anterior (si los hay).
Por último, compare ambas matrices por su length
para averiguar si son iguales o no. Las longitudes desiguales indican la presencia de valores de entrada redundantes.