Al hacer clic en el botón AddMore, estoy presionando el objeto newData en oldData , pero antes de presionar, necesito verificar la condición a continuación.
Quiero verificar si los valores de las columnas productType , processTechType , familyMake y lineId existen más de una vez en la matriz oldData , entonces arrojará un error.
A continuación mis datos:
const newData = {"processTypeId":0,"productType":"Savoury","processTechType":"Mustard","familyMake":["Jelly","Noodles"],"lineId":["R_X002_ACCESS","R_X002_BIB"],"batchSize":"4"} const oldData = [ {"processTypeId":0,"productType":"Savoury","processTechType":"Mustard","familyMake":["Jelly","Noodles"],"lineId":["R_X002_ACCESS","R_X002_BIB"],"batchSize":"1"}, {"processTypeId":0,"productType":"Savoury","processTechType":"Mustard","familyMake":["Jelly","Noodles"],"lineId":["R_X002_ACCESS","R_X002_BIB"],"batchSize":"4"} ]; Hice el siguiente código y funciona perfectamente, pero mi código está comparando el objeto completo con la matriz oldData , pero quiero verificar solo 4 columnas del objeto newData con la matriz oldData .
¿Alguien puede ayudarme a hacer esto?
addNewType(rowdata) { const newData = JSON.stringify(rowdata.value); const oldData = JSON.stringify(this.items.value); if ((oldData.split(newData).length - 1) >= 2) { console.log("Item exist"); } else { this.isRowExist = false; this.addItem(this.createItem(null)); } }puedes hacerlo así:
addNewType(newData) { let isDuplicate = false; for(let data of this.oldData){ if(data.productType == newData.productType || data.processTechType == newData.processTechType || data.familyMake == newData.familyMake || data.lineId == newData.lineId){ isDuplicate = true; break; } } if(isDuplicate){ // Do nothing }else{ this.oldData.push(newData); } }Usando una búsqueda (*):
addNewType(newData) { const el=this.oldData.find(data=> data.productType == newData.productType || data.processTechType == newData.processTechType || data.familyMake.join('|') == newData.familyMake.join('|')) || data.lineId == newData.lineId) if (!el) { this.oldData.push(newData) } } (*) Ver que usar un "si" es como un "bucle normal". La función devuelve "indefinido" si no se encuentra, por lo que usamos la comparación if (!el){...}
NOTA 1: cuando necesitamos comparar dos matrices, necesitamos comparar el "valor" de las matrices. Esta es la razón por la que uso "join" -que devuelve una cadena-, así que comparo las dos cadenas.
Actualizar usando filtro
addNewType(newData) { const elements = this.oldData.filter(data=>data.productType == newData.productType || data.processTechType == newData.processTechType || data.familyMake.join('|') == newData.familyMake.join('|') || data.lineId == newData.lineId) if (elements.length <= 0) { this.oldData.push(newData) } else { // add check here in case of already existance console.log("already exists " + elements.length + " elements equals"); } } NOTA2: la comparación dice que si una de las propiedades es igual. Si necesita que todas las propiedades sean iguales, use && en su lugar ||
** corrección de errores de sintaxis en la segunda muestra de código