[Javascript] Dichtsbijzijnde match vinden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer iets te maken, maar heb geen idee hoe het in elkaar hoort te zitten (rekenen met Javascript), namelijk het volgende:

Op basis van een array met naam, adres, postcodegetallen, postcodeletters, plaats en de postcodegetallen uit een formulier wil ik onblur (initialiseren gebeurt door jquery, dat lukt nog wel) berekenen welke object uit de eerdergenoemde array de dichtsbijzijnde postcode heeft (alleen de nummers hoeven vergeleken te worden). Kan iemand me 'n duwtje in de goede richting geven?

Bedankt!

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 22:28

Matis

Rubber Rocket

Wat bedoel je precies met *dichtstbijzijnde postcode*?

Is 1224 dichterbij 1234 dan 1236? Of wil je het op de kaart uittekenen en dan dichterbij qua kilomters?

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Matis schreef op dinsdag 22 december 2009 @ 12:38:
Wat bedoel je precies met *dichtstbijzijnde postcode*?

Is 1224 dichterbij 1234 dan 1236? Of wil je het op de kaart uittekenen en dan dichterbij qua kilomters?
1236 is dichterbij 1234, gewoon puur welke waarde numerisch gezien het dichtst bij de waarde in het formulier ligt.

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 10:02

MueR

Admin Tweakers Discord

is niet lief

En wat lukt er niet aan? Lijkt mij gewoon een kwestie van verschil berekenen? Is niet moeilijk lijkt me.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 22:28

Matis

Rubber Rocket

In dat geval zul je je postcode's kunnen sorteren van hoog naar laag (of andersom), dan ga je opzoek naar een waarde in je array welke overeenkomt met jouw opgegeven postcode, is die er niet, dan hoog je je postcode eentje op, of verlaag je je postcode met eentje en zoek je opnieuw.

Net zolang totdat je een match hebt.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
MueR schreef op dinsdag 22 december 2009 @ 12:42:
En wat lukt er niet aan? Lijkt mij gewoon een kwestie van verschil berekenen? Is niet moeilijk lijkt me.
Ik zou niet weten waar ik moet beginnen. Het enige dat ik normaliter met Javascript doe is kleine implementatie zoals Lightbox'es, sliders en het tonen of verbergen van info. Dit is niet iets waar ik Javascript normaal voor gebruik (of een andere taal wat dat betreft :) ).

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 10:02

MueR

Admin Tweakers Discord

is niet lief

Dus in feite wil je dat wij het grotendeels voor je gaan voorkauwen? Dat noemen we scriptrequests en daar doen we hier niet aan.

Probeer het gewoon eens. Je hebt een set numerieke waarden en je wil weten welke (numeriek) het dichtst bij $x ligt. Sorteer ze op waarde, pak de waardes direct naast $x en kijk welke dichterbij ligt. Gewoon basis wiskunde.

[ Voor 1% gewijzigd door MueR op 22-12-2009 12:54 . Reden: Vooruit dan, linkje naar WEB beleid ipv PRG.. ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Het heeft eigenlijk niet eens direct met Javascript te maken. Een verschil is de absolute waarde van het ene getal minus het andere getal. Je hoeft dus alleen maar de array af te lopen, voor elke postcode het verschil te bepalen, en je moet dan nog even elke keer bijhouden wat het kleinste verschil was dat je bent tegengekomen.

Dit is echt een standaard programmeerprobleempje, waarvoor je het best zelf de ervaring kunt opdoen door het gewoon te doen. Kun je dit niet, dan moet je niet programmeren.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
MueR schreef op dinsdag 22 december 2009 @ 12:47:
Dus in feite wil je dat wij het grotendeels voor je gaan voorkauwen? Dat noemen we scriptrequests en daar doen we hier niet aan.

Probeer het gewoon eens. Je hebt een set numerieke waarden en je wil weten welke (numeriek) het dichtst bij $x ligt. Sorteer ze op waarde, pak de waardes direct naast $x en kijk welke dichterbij ligt. Gewoon basis wiskunde.
Ik vraag om 'n duwtje in de goede richting, niet om het voor me te schrijven. Dus bedankt voor dat duwtje! Overigens gaat de topic waar je naar wijst over een ander forum, niet over deze.

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op dinsdag 22 december 2009 @ 12:49:
[...]


Ik vraag om 'n duwtje in de goede richting, niet om het voor me te schrijven. Dus bedankt voor dat duwtje! Overigens gaat de topic waar je naar wijst over een ander forum, niet over deze.
Geldt ook voor dit subforum hoor ;)
Webdesign, Markup & Clientside Scripting Beleid

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 09:39
Dit is niet waar overigens. Geografisch gezien kun je aan de waarde van een postcode eigenlijk geen directe conclusies verbinden, hier zul je voor goede resultaten toch een geo-database voor moeten gebruiken.

Het kan bijvoorbeeld makkelijk dat 1236 vlak naast 2011 ligt, maar behoorlijk ver van 1234.

In nieuwere gebieden liggen de postcode ook door elkaar. Als ik me niet vergis heb je in flevoland bijvoorbeeld 3xxx naast 8xxx naast 1xxx richting amsterdam.

[ Voor 26% gewijzigd door Bosmonster op 22-12-2009 13:27 ]


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 22:28

Matis

Rubber Rocket

Bosmonster schreef op dinsdag 22 december 2009 @ 13:24:
Dit is niet waar overigens. Geografisch gezien kun je aan de waarde van een postcode eigenlijk geen directe conclusies verbinden, hier zul je voor goede resultaten toch een geo-database voor moeten gebruiken.

Het kan bijvoorbeeld makkelijk dat 1236 vlak naast 2011 ligt, maar behoorlijk ver van 1234.
Dat klopt, 5131 ligt 5 kilometer van 4861 vandaan en 10 kilometer van 5132 vandaan. Maar daar ging het de TS niet echt om :P

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 09:39
Matis schreef op dinsdag 22 december 2009 @ 13:27:
[...]

Dat klopt, 5131 ligt 5 kilometer van 4861 vandaan en 10 kilometer van 5132 vandaan. Maar daar ging het de TS niet echt om :P
Ik las 'dichtstbijzijnde postcode' toch geografisch, maar wie weet :)

Nog een leuk voorbeeldje:
13xx ligt naast 82xx, maar een paar uur rijden en varen van 17xx :P

[ Voor 13% gewijzigd door Bosmonster op 22-12-2009 13:31 ]


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Oftewel als het om geografisch gaat, dan is het wellicht toch handiger om de echte geo-locaties erbij te pakken ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is een opdracht voor een klant. Het is geen applicatie-kritisch onderdeel, maar een advies. Gebruikers van het formulier kunnen met 1 klik op de knop een pop-up met alle filialen erin openen. Ik ben inmiddels het volgende PHP-script gevonden wat z'n werk zou moeten doen, maar kom een probleem tegen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if(!$error)
{
$match = $pc_tomatch;

$set = array(1,2,3,5,8,13,21,34,55,89,144,233,377,610);

foreach ($set as $fib)
    {
        $diff[$fib] = (int) abs($match - $fib);
    }
$fibs = array_flip($diff);
$closest = $fibs[min($diff)];

echo $closest;


In plaats van alleen de getallen wil ik echter ook een aantal andere gegevens echo'en (naam, adres, plaats). Hoe herschrijf ik de array zo dat de bijbehorende gegevens ook in de echo opgenomen kunnen worden?

Ik snap dat ik wat stukjes syntax mis maar ik wilde geen shitload aan eigenlijk overbodige code plaatsen.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 09:39
edit:

Je hebt nu toch daarin ook al de index naar je originele record? Dan kun je toch gewoon alles weer terughalen? Snap niet wat je bedoelt.

[ Voor 57% gewijzigd door Bosmonster op 22-12-2009 15:12 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bosmonster schreef op dinsdag 22 december 2009 @ 15:10:
edit:

Je hebt nu toch daarin ook al de index naar je originele record? Dan kun je toch gewoon alles weer terughalen? Snap niet wat je bedoelt.
Mijn PHP-kennis is erg matig, wel heb ik een script aan kunnen passen (eigenlijk een contactformscript) zodat deze door JavaScript aangeslingerd wordt, en de JavaScript ook de return afvangt, opbreekt en op de juiste plekken plaatst. Wat ik echter niet snap is hoe ik de array op de juiste manier schrijf, waardoor de functie blijft werken.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 09:39
Je zult de functie ook iets aan moeten passen, om met een multidimensional array om te kunnen gaan.

Maar volgens mij wil je een kant-en-klaar voorbeeld.

[ Voor 22% gewijzigd door Bosmonster op 22-12-2009 15:36 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bosmonster schreef op dinsdag 22 december 2009 @ 15:35:
Je zult de functie ook iets aan moeten passen, om met een multidimensional array om te kunnen gaan.

Maar volgens mij wil je een kant-en-klaar voorbeeld.
Ik begrijp dat ik de functie iets aan moet passen, maar weet gewoon niet in welke richting ik moet denken. Het is nou ook niet echt een scriptrequest meer zoals eerder in het forum aangegeven werd. Ik heb het op zich werkend, maar kan de extra dimensie (NAW-gegevens) niet toevoegen...

Acties:
  • 0 Henk 'm!

Verwijderd

Jouw probleem is dat je nooit hebt leren programmeren, wat kunnen wij daaraan doen? Leer gewoon die basis.

Acties:
  • 0 Henk 'm!

  • Big4SMK
  • Registratie: September 2001
  • Laatst online: 09:30
Ik zou eens een boek/artikel/website/tutorial whatever erbij pakken over 'multi dimensional array' of 'array of arrays'

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 14-09 14:15
onex77 schreef op dinsdag 22 december 2009 @ 19:22:
:( niemand die me even met het laatste probleem op weg kan helpen?
Verder als ik jou was zou ik toch echt even naar die helpsites gaan zoals PHPHulp om daar wat tutorials te lezen en eventueel tegen je klant zeggen dat je het niet aankan omdat je er nog niet genoeg vanaf weet.

Eerlijkheid wordt toch altijd beloont, het scheelt je later heel veel kopzorgen. ;)

[ Voor 10% gewijzigd door Manuel op 22-12-2009 19:40 . Reden: *beetje vriendelijker ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 10:02

MueR

Admin Tweakers Discord

is niet lief

Mag de toon wat vriendelijker?

[ Voor 41% gewijzigd door MueR op 22-12-2009 19:42 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik denk dat de TS sowieso een cursus programmeren mag nemen maar daarnaast ook de klant goed duidelijk moet maken dat dit stukje script totaal ongewenste resultaten gaat opleveren. Waarschijnlijk wil de klant niet dat een inwoner uit Maastricht z'n postcode invoert en een filiaal in Groningen terugkrijgt als "in de buurt" omdat je het baseert op de getallen ipv. de geografische locatie.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
MueR schreef op dinsdag 22 december 2009 @ 19:35:
[mbr]Mag de toon wat vriendelijker?[/]
Toon was absoluut niet onvriendelijk bedoeld, :( smiley is normaal sip ipv rood van boosheid, mi scusi. Ik had een iets behulpzamer forum verwacht. Ik heb het CMS SilverStripe kunnen leren door de tutorials te volgen en daarna op het forum te vragen. Werd meer dan vriendelijk geholpen, of op z'n minst in de goede richting geholpen.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Tja, simpele vraag dan maar. Waar wordt regel 5 door gevoed, het mechanisme wat dit voedt kan je ook je naw gegevens erbij laten vullen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Cartman! schreef op dinsdag 22 december 2009 @ 19:53:
Ik denk dat de TS sowieso een cursus programmeren mag nemen maar daarnaast ook de klant goed duidelijk moet maken dat dit stukje script totaal ongewenste resultaten gaat opleveren. Waarschijnlijk wil de klant niet dat een inwoner uit Maastricht z'n postcode invoert en een filiaal in Groningen terugkrijgt als "in de buurt" omdat je het baseert op de getallen ipv. de geografische locatie.
Ik heb de klant daarvan bewust gemaakt. Een implementatie van Locatienet gaat echter te lang duren, waardoor de campagne kant noch wal zou raken. Zoals ik zei: ze bieden het aan als extra, met daarboven nog een link naar een lijst met alle filialen, met daar wél een locatienet-implementatie.

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 14-09 14:15
Verwijderd schreef op dinsdag 22 december 2009 @ 22:01:
[...]


Toon was absoluut niet onvriendelijk bedoeld, :( smiley is normaal sip ipv rood van boosheid, mi scusi. Ik had een iets behulpzamer forum verwacht. Ik heb het CMS SilverStripe kunnen leren door de tutorials te volgen en daarna op het forum te vragen. Werd meer dan vriendelijk geholpen, of op z'n minst in de goede richting geholpen.
Sorry maar wij verwachten op GoT een beetje inzet en wat kennis van zaken voordat er een topic wordt geopend zoals is te lezen in de FAQ. :) *doe nou eens niet*

Maar hier zijn al genoeg tips gegeven door Bosmonster bijvoorbeeld, hij adviseert je ook om het geografisch te bepalen en niet per getal wat kan leiden tot een incorrect resultaat. Je moet je er alleen voor open zetten ;). Voor die vragen zoals van die array moet je toch echt een de documentatie van iets doornemen aangezien we niet alles voorkouwen :)

[ Voor 3% gewijzigd door MueR op 23-12-2009 00:12 ]

Pagina: 1