Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

161
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda