La idea era consultar un conjunto de datos con parámetros de cadena de consulta. Solo quiero que los "registros" coincidan solo con lo que se consultó.
conjunto de datos
{ 1111: { Category: "Education" Role: "Analyst" } 2222: { Category: "Communications and Media" Role: "Analyst" } 3333: { Category: "Public Sector" Role: "Something else" } 4444: { Category: "Public Sector" Role: "Something else" } ... } [[Prototype]]: ObjectEstoy enviando qString
Category: (2) ['Communications and Media', 'Education'] Role: ['Analyst'] length: 0 [[Prototype]]: Array(0) Me gustaría repetir eso y filtrar/reducir para que solo tenga registros que coincidan. Una especie de and en lugar de un or .
dataSet es un objeto de objetos. ¿Pensamientos? Gracias por adelantado.
export const Filtered = (qStrings, dataSet) => { const filtered = []; Object.entries(qStrings).forEach(([field]) => { qStrings[field].forEach((value) => { filtered.push( ..._.filter(dataSet, (sess) => { if (sess[field] && sess[field].toString() === value.toString()) { return sess; } }) ); }); }); return _.uniq(filtered); };caramba, lo descubrí con un colega que es mucho más inteligente que yo guiño Jess!
export const Filtered = (qStrings, dataSet) => { let filtered = []; Object.entries(qStrings).forEach(([field], idx) => { let source = filtered; if (idx === 0) { source = dataSet; } filtered = _.filter(source, (sess) => { return sess[field] && sess[field].includes(qStrings[field]); }); }); return _.uniq(filtered); };Ahora a limpiar esto.
No estoy seguro de si esto resuelve su problema exactamente, pero puede aplicar esta lógica sin mutación para una función mucho más limpia.
export const matches = (qStrings, dataSet) => Object.entries(dataSet).reduce((acc, [key, value]) => Object.entries(value).every(([rKey, rValue]) => qStrings[rKey]?.includes(rValue)) ? { ...acc, [key]: value } : acc, {});Esto devolverá los registros 1111 y 2222 porque coinciden con una de las categorías y el rol en qStrings.