Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

337
Views
¿Cómo puedo obtener claves con valores únicos en una matriz de objetos? (JavaScript)

Tengo una matriz de Objetos que contienen dos valores: {path: '/index', ip: '123.456.789'} Algunas de las rutas son las mismas, al igual que las ip. Algunos duplicados, algunas combinaciones únicas.

Quiero, para cada ruta única, la cantidad de direcciones IP diferentes adjuntas a esa ruta. Entonces, por ejemplo, puede haber 15 objetos con path: '/index' , pero solo 4 IP únicas para esa ruta.

En términos más simples, quiero encontrar la cantidad de visitantes únicos a una página de sitio web en particular.

Espero que esto tenga sentido, muchas gracias de antemano.

Editar:

Esto es lo que tengo hasta ahora, para generar vistas no únicas:

 export const generateViews = (viewData: string): Map<string, number> => { const pathViewMap: Map<string, number> = new Map(); const viewDataArray = viewData.split("\n"); for (let i = 0; i < viewDataArray.length; i++) { const [path] = viewDataArray[i].split(" "); if (path) { if (pathViewMap.has(path)) { pathViewMap.set(path, pathViewMap.get(path) + 1); } else { pathViewMap.set(path, 1); } } } return pathViewMap; };

Por contexto, la entrada es una cadena que proviene de un archivo de registro de una lista de rutas/ips

Edición 2:

Gracias a Peter Seliger, pude encontrar mi propia solución:

 const viewDataArray = viewData.split("\n").filter((item) => item); const arr: { path: string; ip: string }[] = viewDataArray.map( (line: string) => { const [path, ip] = line.split(" "); if (path && ip) { return { path, ip }; } } ); const paths: string[] = Array.from(new Set(arr.map((obj) => obj.path))); const uniqueViewsMap: Map<string, number> = new Map(); for (let i = 0; i < paths.length; i++) { const path = paths[i]; const ips = Array.from( new Set(arr.filter((obj) => obj.path === path).map((obj) => obj.ip)) ); uniqueViewsMap.set(path, ips.length); } console.log("==uniqueViewsMap==", uniqueViewsMap);
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

 const sampleData = [ { path: '/index', ip: '123.456.789' }, { path: '/index/x', ip: '123.456.789' }, { path: '/index/', ip: '123.456.78' }, { path: '/index/y', ip: '123.456.789' }, { path: '/index/', ip: '123.456.89' }, { path: 'index/', ip: '123.456.9' }, { path: 'index', ip: '123.456.8' }, { path: '/index/', ip: '123.456.78' }, { path: '/index/x/', ip: '123.456.78' }, { path: 'index/x/', ip: '123.456.7' }, { path: 'index/x', ip: '123.456.6' }, ]; console.log( sampleData .reduce((result, { path, ip }, idx, arr) => { // sanitize/unify any path value path = path.replace(/^\/+/, '').replace(/\/+$/, ''); // access and/or create a path specific // set and add the `ip` value to it. (result[path] ??= new Set).add(ip); // within the last iteration step // transform the aggregated object // into the final result with the // path specific unique ip count. if (idx === arr.length - 1) { result = Object .entries(result) .reduce((obj, [path, set]) => Object.assign(obj, { [path]: set.size }), {} ); } return result; }, {}) );

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!