Tengo dos de los mismos objetos para comparar, con diferentes tipos de datos como accesorios de objeto (matriz y objeto).
Quiero saber cuántas propiedades son diferentes a la primera. Vea el ejemplo a continuación:
OriginalObject = { names : [], numbers : [], dates :{ from: null, to : null, }, other :{ from: null, to : null, }, } ModifiedObject = { names : ['Steven', 'Judy'], numbers : [1,5,7], dates :{ from: 15152112512, to : null, }, other :{ from: null, to : null, }, }Dado que los nombres, números y fechas cambiaron, el resultado deseado es: 3
Estaba pensando que tal vez podría iterar sobre las propiedades del objeto y usar _.isEqual de lodash, pero me gustaría saber si hay una versión fácil y abreviada para lograr esto.
Si desea una solución usando lodash, puede aplicar _.toPairs() en ambos objetos. Luego use _.differenceWith() para comparar las matrices obtenidas y finalmente obtenga la longitud de la matriz de comparación:
OriginalObject = { names : [], numbers : [], dates :{ from: null, to : null, }, other :{ from: null, to : null, }, } ModifiedObject = { names : ['Steven', 'Judy'], numbers : [1,5,7], dates :{ from: 15152112512, to : null, }, other :{ from: null, to : null, }, } console.log(_.differenceWith(_.toPairs(OriginalObject), _.toPairs(ModifiedObject), _.isEqual).length); <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>He usado esto como una solución.
appliedFiltersCount (state) { let changedCount = 0 Object.keys(state.filters).forEach((field) => { if (field in state.filters && field in getDefaultState().filters) { if (!isEqual(state.filters[field], getDefaultState().filters[field])) { changedCount++ } } }) return changedCount },