Tengo 2 arreglos de objetos
arrayOne = [{objectType: 'License', objectId: 333, objectName: 'Test Object 1', dataType: 'String'} {objectType: 'Owner', objectId: 334, objectName: 'Test Object 2', dataType: 'String'}, {objectType: 'Location', objectId: 335, objectName: 'Test Object 3', dataType: 'String'}] arrayTwo = [{objectType: 'LICENSE', objectId: 333, objectName: 'Test Object 1', dataType: 'String'} {objectType: 'OWNER', objectId: 334, objectName: 'Test Object 4', dataType: 'Value List'}, {objectType: 'LOCATION', objectId: 335, objectName: 'Test Object 3', dataType: 'String'}] Como podemos ver en arrayTwo , objectName y dataType cambian. Es posible que cualquiera de las propiedades cambie, pero la cantidad de objetos siempre será la misma en ambas matrices.
Entonces, aquí, necesito extraer los objetos de arrayTwo que se ha cambiado al compararlos con arrayOne y almacenarlos en una nueva matriz, digamos resultsArray ?
Revisé las respuestas proporcionadas en Cómo obtener la diferencia entre dos matrices de objetos en JavaScript , solo habla de obtener las diferencias en función de una propiedad, no de ninguna propiedad. Por favor, sugiera esto. Gracias.
EDITAR: arrayTwo editado para tener letras mayúsculas para objectType . Necesito ignorar el caso y el resultado debe ser insensible a mayúsculas y minúsculas. Gracias
Una opción es iterar a través de los primeros elementos de la matriz, encontrar el mismo elemento para la segunda matriz por su id y luego verificar si alguna de sus propiedades ha cambiado:
arrayOne = [{ objectType: 'License', objectId: 333, objectName: 'Test Object 1', dataType: 'String' }, { objectType: 'Owner', objectId: 334, objectName: 'Test Object 2', dataType: 'String' }, { objectType: 'Location', objectId: 335, objectName: 'Test Object 3', dataType: 'String' } ] arrayTwo = [{ objectType: 'License', objectId: 333, objectName: 'Test Object 1', dataType: 'String' }, { objectType: 'Owner', objectId: 334, objectName: 'Test Object 4', dataType: 'Value List' }, { objectType: 'Location', objectId: 335, objectName: 'Test Object 3', dataType: 'String' } ]; const changedObjects = arrayOne.filter(obj1 => { const obj2 = arrayTwo.find(x => x.objectId === obj1.objectId); return Object.keys(obj1).some(key => String(obj1[key]).toLowerCase() !== String(obj2[key]).toLowerCase()); }); console.log(changedObjects);EDITAR: El ejemplo anterior devolverá el elemento de arrayOne. En caso de que necesite el elemento con los nuevos valores, puede invertir arrayOne y arrayTwo dentro de la función.