Tengo 2 matrices de objetos y 2 si las condiciones
if(JSON.stringify(this.updatedData) !== JSON.stringify(this.originalData) && this.updatedData.length === this.originalData.length) { this.customAttributes = editedCustomAttributes; this.customAttributes.forEach(function (element) { element.action = "edit"; }); } if (JSON.stringify(this.updatedData) !== JSON.stringify(this.originalData) && his.updatedData.length !== this.originalData.length) { const items = this.updatedData.filter(item => item.attributeId == null); items.forEach(function (element) { element.action = "add"; }); } Al editar una fila de la cuadrícula, los datos originalData y los updatedData tendrán la misma longitud, por lo tanto, el primero si se ejecuta la condición. Mientras agrego una nueva fila, la longitud de los updatedData será más que los datos originalData , por lo tanto, el segundo si se ejecuta la condición.
Pero tengo una situación en la que un usuario puede agregar una nueva fila y editar una fila existente a la vez. En ese escenario en particular, necesito ejecutar ambas condiciones if y me quedé allí. Cualquier sugerencia será apreciada. Gracias.
Podrías intentar algo de la siguiente manera:
function check() { const original = JSON.stringify(originalData) if (originalData.length !== updatedData.length) { // If lengths are not equal then new rows were added addedAction() // Check the two arrays again without those new rows const newRows = updatedData.length - originalData.length if (JSON.stringify(updatedData.slice(0, -newRows)) !== original) { editedAction() } } else if (JSON.stringify(updatedData) !== original) { editedAction() } } Las addedAction() y editedAction() son exactamente lo que sucederá en respuesta a una edición o adición.
En el caso de que se realice una adición y una edición, addedAction() se ejecutará primero debido a la diferencia de longitudes. Luego, los datos originalData se compararán con una parte de los datos actualizados y la función updatedData editedAction() se ejecutará si no son los mismos después de eliminar las filas recién agregadas.
Aquí hay un ejemplo con los tres casos:
function check() { const original = JSON.stringify(originalData) if (originalData.length !== updatedData.length) { // If lengths are not equal then new rows were added addedAction() // Check the two arrays again without those new rows const newRows = updatedData.length - originalData.length if (JSON.stringify(updatedData.slice(0, -newRows)) !== original) { editedAction() } } else if (JSON.stringify(updatedData) !== original) { editedAction() } console.log('') } function editedAction() { console.log('Edited') } function addedAction() { console.log('Added') } console.log('First case:') let originalData = [{ name: 'a' }, { name: 'b' }] let updatedData = [{ name: 'a' }, { name: 'b' }, { name: 'd' }, { name: 'asd' }] check() console.log('Second case:') originalData = [{ name: 'a' }, { name: 'b' }] updatedData = [{ name: 'a' }, { name: 'TEST' }] check() console.log('Third case:') originalData = [{ name: 'a' }, { name: 'b' }] updatedData = [{ name: 'a' }, { name: '123' }, { name: 'test2' }] check() .as-console-wrapper { min-height: 100% }