Estoy haciendo una función que compara dos matrices de objetos y devuelve dos matrices de subconjuntos de objetos. La primera matriz devuelta es un conjunto de objetos que no se incluyeron en la matriz pasada dentro de la segunda propiedad, y la segunda matriz devuelta es un conjunto de objetos que no se incluyeron en la primera matriz pero ahora se incluyen en la segunda.
Esto funciona, sin embargo, quiero agregar una funcionalidad adicional para devolver la segunda matriz con claves específicas. ¿Hay alguna forma de utilizar la funcionalidad "pickBy" de lodash dentro de la función de filtro, o tendré que crear una sección recursiva adicional?
function extract_removed_new (before, after, matching, pickBy = []) { let before_ = cloneDeep(before) let new_ = _.filter(after, (item) => { let index_ = _.findIndex(before_, function (i) { return _.get(i, matching) == _.get(item, matching) }) if(index_ !== -1) { before_.splice(index_, 1) return false } if(pickBy.length > 0) { return _.pickBy(item, function(value, key) { if(key in pickBy) { return true } }); } return true }) return [before_, new_]
}
Usando lodash compact, con map
pude obtener exactamente lo que necesitaba.
function extract_removed_new (before, after, matching, pickBy = []) { let before_ = cloneDeep(before) let new_ = _.compact(_.map(after, (item) => { let index_ = _.findIndex(before_, function (i) { return _.get(i, matching) == _.get(item, matching) }) if(index_ !== -1) { before_.splice(index_, 1) return false } if(pickBy.length > 0) { return _.pickBy(item, function(value, key) { if(pickBy.includes(key)) { return true } }); } return item })) return [before_, new_]
}