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

163
Views
Cómo obtener la propiedad de una matriz usando filtro

Estoy tratando de obtener la coincidencia de la siguiente matriz comparando las coordenadas del navegador con las coordenadas en la matriz, pero obtengo un valor 'indefinido' cuando llamo a la const 'matchgeosucursal' incluso si fuerzo la condición del filtro para hacer coincidir, el objetivo de este código es obtener la URL del escenario de coincidencia, creo que estoy usando mal la función de filtro.

 //Request permissions $( document ).ready(function getLocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition); } else { console.log ("Geolocation is not supported by this browser."); } //Filter and gets match url function showPosition(position) { console.log("Latitude: " + position.coords.latitude) console.log("Longitude: " + position.coords.longitude); var navlat = position.coords.latitude; //Browser lat var navlon = position.coords.longitude; // Browser lon // Array var sucursales = [ {lat: 21.924089, lon: -102.293378, url: "https://shorturl.at/test1"}, {lat: 21.859964, lon: -102.298034, url: "https://shorturl.at/test2"}, {lat: 32.45569, lon: -116.836181, url: "https://shorturl.at/test3"}, {lat: 24.114868, lon: -110.340389, url: "https://shorturl.at/test4"}, {lat: 21.0335386, lon: -89.559187, url: "https://shorturl.at/test5"}]; //Match result const matchgeosucursal = sucursales.filter( sucursales => sucursales.lat === navlat && sucursales.lon === navlon); console.log('Match> ' + matchgeosucursal); } });
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Funciona bien, lo único es que console.log no imprime los objetos correctamente. console.table en mi prueba y todo se ve bien:

Nota: hice de la position una constante porque no puedo extraer las coordenadas de un documento como lo ha hecho usted. Pero funcionará siempre que tenga los valores correctos para position.coords.latitude y ...longitude

 const position = { coords: { latitude: 21.0335386, longitude: -89.559187, } } function showPosition(position) { console.log("Latitude: " + position.coords.latitude) console.log("Longitude: " + position.coords.longitude); var navlat = position.coords.latitude; //Browser lat var navlon = position.coords.longitude; // Browser lon // Array var sucursales = [ {lat: 21.924089, lon: -102.293378, url: "https://shorturl.at/test1"}, {lat: 21.859964, lon: -102.298034, url: "https://shorturl.at/test2"}, {lat: 32.45569, lon: -116.836181, url: "https://shorturl.at/test3"}, {lat: 24.114868, lon: -110.340389, url: "https://shorturl.at/test4"}, {lat: 21.0335386, lon: -89.559187, url: "https://shorturl.at/test5"}]; //Match result const matchgeosucursal = sucursales.filter( sucursales => sucursales.lat === navlat && sucursales.lon === navlon); console.log("Match:") console.table( matchgeosucursal); } showPosition(position)
about 4 years ago · Juan Pablo Isaza Report

0

Es probable que esté obteniendo un resultado indefinido porque su filtro está buscando una coincidencia exacta para la latitud y la longitud, y la ubicación geográfica del usuario no es lo suficientemente precisa como para identificar la latitud y la longitud exactas por las que está filtrando.

Para obtener una coincidencia, puede verificar si la latitud y la longitud del usuario están dentro de un rango, así:

 const matchgeosucursal = sucursales.filter( sucursales => sucursales.lat >= (navlat -.005) && sucursales.lat <= (navlat +.005) && sucursales.lon >= (navlon -.005) && sucursales.lon <= (navlon +.005));

Eso le daría precisión dentro de aproximadamente media milla. Obviamente, puede ajustar la amplitud de un rango que le gustaría usar, según sea necesario para su caso de uso.

 //Request permissions $( document ).ready(function getLocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition); } else { console.log ("Geolocation is not supported by this browser."); } //Filter and gets match url function showPosition(position) { console.log("Latitude: " + position.coords.latitude) console.log("Longitude: " + position.coords.longitude); var navlat = position.coords.latitude; //Browser lat var navlon = position.coords.longitude; // Browser lon // Array var sucursales = [ {lat: 21.924089, lon: -102.293378, url: "https://shorturl.at/test1"}, {lat: 21.859964, lon: -102.298034, url: "https://shorturl.at/test2"}, {lat: 32.45569, lon: -116.836181, url: "https://shorturl.at/test3"}, {lat: 24.114868, lon: -110.340389, url: "https://shorturl.at/test4"}, {lat: 21.0335386, lon: -89.559187, url: "https://shorturl.at/test5"}]; //Match result const matchgeosucursal = sucursales.filter( sucursales => sucursales.lat >= (navlat -.005) && sucursales.lat <= (navlat +.005) && sucursales.lon >= (navlon -.005) && sucursales.lon <= (navlon +.005)); console.log('Match > \nlat: ' + matchgeosucursal[0].lat +"\nlon: " + matchgeosucursal[0].lon + "\nurl: " + matchgeosucursal[0].url); } });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

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!