- Garmin Forerunner 165 - alapozó edzés
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Yettel topik
- iOS alkalmazások
- Vodafone mobilszolgáltatások
- Amazfit GTS 4 - divatos megjelenés
- Android alkalmazások - szoftver kibeszélő topik
- Redmi Note 12 5G - ez lenne az ász?
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- Mobilinternet EU-n kívül, eSIM adatcsomagok használata
Hirdetés
-
Premier előzetesen a Wrath: Aeon of Ruin konzolos változatai
gp A PC-s változat után a minap PlayStationre, Xbox-ra és Switch-re is elérhető lett a program.
-
Olcsó 5G-s ajánlatot nyújt a Realme Indiának
ma Megérkezett a Realme C65 5G, az első készülék a MediaTek Dimensity 6300-zal.
-
Miniképernyős, VIA-s Epomaker billentyűzet jött a kábelmentes szegmensbe
ph A megfizethető, szivacsokkal jól megpakolt modell ötfajta kapcsolóval és kétféle színösszeállítással/kupakprofillal szerezhető be.
-
Mobilarena
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
trisztan94
őstag
Hali!
Még mindig a térképes alkalmazáson dolgozom, amivel bénáztam a weblap készítés topikban. Most csak egy egyszerű kérdésem lenne. Van egy form, amit ha felad a felhasználó, kiszedi az adatokat az input mezőkből (címeket), azt pedig elküldi egy aszinkron függvénynek, ami utólag feltölt vele egy tömböt.
Jelenleg még csak két input mezővel tesztelem:
[OFF]<div class="form-group waypoint-container">
<label for="waypoints" class="col-md-1 control-label">1.</label>
<div class="col-md-11">
[/OFF] <input type="text" name="waypoints[]" class="form-control form-control-square waypoint" placeholder="Indulási hely" />
[OFF] </div>
</div>
<div class="form-group waypoint-container last-waypoint-container">
<label for="waypoints" class="col-md-1 control-label">2.</label>
<div class="col-md-11">[/OFF]
<input type="text" name="waypoints[]" class="form-control form-control-square waypoint" placeholder="Érkezési hely" />
[OFF] </div>
</div>[/OFF]Itt a form submit eseményre rakott eseménykezelőm:
$('.form-directions').on('submit', function () {
$('.waypoint').each(function () {
getDrivingDirections($(this).val());
});
return false;
});A getDrivingDirections függvény alapvetően két dolgot csinál: első körben geocode-olja (magyarul "geokód"?) a beírt adatokat, hogy GPS koordinátákkal tudjunk dolgozni. Amikor megkaptuk a koordinátákat, akkor pedig tervez rá egy útvonalat a megadott paraméterekkel. Tehát a getDrivingDirections függvény két másik függvényt hív meg: geoCode() és planRoute(). Egyelőre még csak a geoCode függvény implementálásánál tartok.
Tehát miután meghívtuk a getDrivingDirections-t, meghívódik a geoCode():
function geoCode (address) {
nokia.places.search.manager.findPlaces({
searchTerm: address,
onComplete: onGeoCodingCompleted,
searchCenter: map.center
});
}Ez végül meghívja amikor végetért az aszinkron feladat az onGeoCodingCompleted függvényt:
function onGeoCodingCompleted(data, requestStatus, requestId) {
if (requestStatus == "OK") {
var locations = data.results.items;
waypoints.push(locations[0].position);
for (var i = 0; i < waypoints.length; i++) {
console.log(waypoints[i]);
}
} else if (requestStatus == "ERROR") {
alert("hiba");
}
}Na és most jönne a tényleges kérdés. A console.log 3 objektumot ad vissza mindig, pedig csak két input mező van. Mindig az első input mezőt logolja kétszer:
Miért?
(Azért írtam le így az egész működést, mert biztosan lesznek még kérdéseim ezzel kapcsolatban, így ezt megelőlegeztem magamnak )
https://heureka-kreativ.hu
-
trisztan94
őstag
Még egy kérdésem lenne.
Hogyan tudom figyelni, hogy mikor van meg az összes beírt megálló GPS koordinátája, tehát, hogy mikor fejeződött be az összes aszinkron feladat?
Nyilván itt az lenne a lényeg, hogy akkor lépjen csak be az útvonaltervezés függvényébe, ha már megvan az összes koordináta.
https://heureka-kreativ.hu
-
Jim-Y
veterán
válasz trisztan94 #3952 üzenetére
például egy boolean property segítségével. Amin most én dolgozom, ott Future-ök vannak, az aszinkron fv callbackje egy ilyen Future objektumot ad vissza amire lehet hívni .then()-t és ebben a callback-ben át lehet billenteni azt a property-t, ugyanis a then csak akkor hajtódik végre, ha az aszinkron kommunikációnak vége. Ez a te esetedben annyit jelent, hogy csinálj valahol egy, az aszinkron kommunikációra nézve globális property-t, majd sikeres response esetén billentsd át az értékét.
Egyébként javaslom keress rá a js promise-ra. Én még nem dolgoztam vele, de tudtommal jó cucc
-
Sk8erPeter
nagyúr
válasz trisztan94 #3951 üzenetére
Nem tudom, ezt hogy lehetett ilyen bonyolultan leírni, nekem 3-szor kellett elolvasnom, hogy felfogjam.
Ez kábé a látatlanban debuggolhatatlan kategória. Mi van a waypoints tömbben, amibe pusholod a locations[0].positiont? Azután van egy for ciklus, aminek során kétszer íródik ki ugyanaz az elem, meg kéne nézni, a push előtt nincs-e már benne eleve az az elem, ami duplikálódk. Ennél konkrétabbat akkor tudnánk mondani neked, ha láthatnánk valami működő példát.
Sk8erPeter
-
trisztan94
őstag
Bocsi, hogy csak most válaszolok.
Végül sikerült megoldani future objektumokkal... vagyis... sort of.
Ez a végleges megoldás, lehet, hogy gány, de egyelőre működik, bőven elég. Tudok végre haladni.
$('.form-directions').on('submit', function () {
waypoints = [];
promises = [];
$('.waypoint').each(function () {
promises.push(geoCode($(this).val()));
});
return false;
});function geoCode(address) {
var deferred = $.Deferred();
nokia.places.search.manager.findPlaces({
searchTerm: address,
onComplete: function (data, requestStatus, requestId) {
onGeoCodingCompleted(data, requestStatus, requestId);
deferred.resolve();
},
searchCenter: map.center
});
return deferred.promise();
}Az onGeoCodingComplete függvényben nem változik semmi, csak ezt az egy plusz sort raktam bele:
if (waypoints.length == promises.length / 2) {
drivingDirections();
}Na most azért lett osztva a promises tömb kettővel, mert valamiért minden esetben a waypoints tömb elemeinek számának kétszerese volt benne. Tehát mindent 2x vett.
Tehát annyi a kérdés, hogy miért van a promises tömbben 2x annyi elem, mint a waypoints tömbben?
https://heureka-kreativ.hu
-
martonx
veterán
válasz trisztan94 #3955 üzenetére
Szerinted a bedobott kódod alapján honnan tudjuk?
Én kérek elnézést!
-
fordfairlane
veterán
válasz trisztan94 #3955 üzenetére
Tehát annyi a kérdés, hogy miért van a promises tömbben 2x annyi elem, mint a waypoints tömbben?
Globális változók. A jóég tudja ennyiből megállapítani. "use strict"
x gon' give it to ya
-
szabo.norbi
tag
Tudom, hogy nem ide való de hátha tudtok segíteni!
Ezt a feladatot kellene megoldanom:
1. Hozza létre a lotto nevû tömböt, a lotto.txt alapján. Hat sor, soronként 5 szám.
2. Generálja a 7. hét lottó számait. [1,90]
3 Írassa ki az így kapott tömböt[7][5] a képernyõre.
4. Hány darab 50-tõl nagyobb szám lett generálva?
5. Melyik a legkisebb generált szám?
6. Szerepel-e a 19-es szám a kihúzott számok között?7. Készítsen kimutatást:
a) Adja össze oszlopokat
pl:
37 42 44 61 62
18 42 54 83 89
5 12 31 53 60
1 28 47 56 70
54 56 57 59 71
7 21 33 39 86
9 22 32 78 89
Az 1.oszlop összege = 135
a 2.oszlop összege = 223
stb+azt elfelejtettem, hogy netbeans-ben kellene.
[ Szerkesztve ]
Az „érintett” és az „elkötelezett” közötti különbséget legjobban a sonkás tojásrántottával mutathatjuk be:a csirke „érintett”, a disznó viszont ”elkötelezett”! /// iPhone 6
-
martonx
veterán
válasz szabo.norbi #3958 üzenetére
várjuk a jsfiddle példádat, hogy hol a hiba a kész kódodban.
Én kérek elnézést!
-
Karma
félisten
válasz szabo.norbi #3958 üzenetére
JavaScript nyelven kellene? Vagy valami másban?
Ugyanis ha nem JS, akkor nem tényleg nem ide való...A programozás topik összefoglalóján keresztül megtalálod a többi topikot, a megfelelőbe tedd fel inkább a kérdést.
“All nothings are not equal.”
-
trisztan94
őstag
válasz szabo.norbi #3958 üzenetére
Vicces fiú vagy.
Karma: szvsz azt akarja, hogy csináljuk meg neki.
[ Szerkesztve ]
https://heureka-kreativ.hu
-
-
The DJ
addikt
A Bitstamp tickert szeretném megjeleníteni egy weboldalon, de nem akar működni. Valaki látja, hogy hol a hiba? A konzol syntax errort dob a 25. sorban, de nem látom mi a baj.
JSFiddle: [link]
https://wpszaki.hu - Minden, ami WordPress, cikkek kezdőknek és haladóknak.
-
wis
tag
Így már lefut: [link]
Csak most előjött a Same-origin policy probléma. Tehát ajax-szal nem tölthetsz le adatokat másik domainról ha az nem ad rá engedélyt.
Viszont azt megteheted, hogy szerver oldalon intézel kérést az oldal felé és a szkripted a szerver oldali kódoddal kommunikál. -
trisztan94
őstag
véletlen hsz
[ Szerkesztve ]
https://heureka-kreativ.hu
-
trisztan94
őstag
Hello!
for (var key in JSON) {
if(parseFloat(JSON[key][3])>0 && parseFloat(JSON[key][4])>0) {
if (parseInt(key) === 1){
}
else if(parseInt(key) === Object.size(JSON)) {
}
else { }
}
}Itt három dologra kell figyelni:
1. ha a key értéke az első elem
2. ha a key értéke az utolsó elem
3. ha a key értéke más, tehát köztes számA 2. és 3. rész készen van, viszont az 1.-re nem nagyon jut eszembe semmi. Az a lényeg, hogy nem biztos, hogy az 1. vagy 2., vagy akár 3. lesz az első ami átmegy az első elágazáson. Tehát nekem az az elem kell, ami először megy át a fenti if()-en.
Hogyan kellene ezt?
https://heureka-kreativ.hu
-
martonx
veterán
válasz trisztan94 #3968 üzenetére
Esetleg valami normális jsfiddle példával szemléltetnéd, hogy mit is szeretnél?
Én kérek elnézést!
-
Jim-Y
veterán
válasz trisztan94 #3968 üzenetére
Hát, ha nem for in -nel csinálnád, akkor az indextől függően kimenthetnéd az első elemet, vagy használhatsz egy flaget is erre a célra.
-
trisztan94
őstag
válasz martonx #3969 üzenetére
Hat igazabol nem nagyon tudom.
Az a lenyeg, hogy amikor meghivjuk a fgvt akkor atadunk neki egy bazi nagy JSON tombot, amiben utvonal adatok vannak (kkordinatak, megnevezes, kozeli helyek, stb).
Az elso elagazas azt ellenorzi, hogy a lat es long koordinatak benne vannak-e.Ami az elso es utolso elem, az lesz a kezdopont es vegpont, a koztuk levok pedig a megallok.
Jim-Y
Jaja a flagre mar en is gondoltam. Berakok egy boolean valtozot false ertekkel, es egyszeruen azt nezem, hogy igaz-e. Akkor lesz igaz, amikor a kulso elagazasbol belep, tehat egyszer fog csak valtozni az erteke.[ Szerkesztve ]
https://heureka-kreativ.hu
-
Jim-Y
veterán
válasz trisztan94 #3971 üzenetére
Amúgy arra nem gondoltál, hogy csinálsz egy mondjuk Checkpoint nevű osztályt, amiben szerepelni fog minden adat egy csomópontról, illetve két példányváltozó, egy isStart, illetve egy isFinish, és a kezdő, és végpontoknál ezt simán átbillented?! Egyrészt akkor olvashatóbb lenne a kódod, másrészt szerintem logikusabb is
Ekkor kb ilyenre változna a kódod:
for (var checkpoint in checkpoints) {
if (checkpoint.lat >0 && checkpoint.lng >0 ) {
if ( checkpoint.isStart ){
}
else if( checkpoint.isFinish ) {
}
else { }
}
}[ Szerkesztve ]
-
Sk8erPeter
nagyúr
válasz trisztan94 #3968 üzenetére
Biztos velem van a baj, de én ezeken a kódokon nem tudok kiigazodni, meg nem vágom, hogy készülnek ezek, és miért így. Semmit nem fejez ki a kód az elvárt struktúráról, nincs benne megkötés, normális hibaellenőrzés, és igazából a kódból nem értem meg, mi a cél.
Igazából ha egy rövid jó leírást kaphatnánk magáról a feladatról, meg a kapott adatstruktúra konkrét felépítéséről, akkor lehet, hogy tudnánk javasolni alternatív megoldást, ami szebb kódot eredményezne. (Azt is kéne tudni, tudsz-e változtatni a kapott adatstuktúrán, vagy arra nincs lehetőséged, mert nem te rakod össze.) Ebben a formában eléggé tákolás feelingje van a dolognak.Sk8erPeter
-
Jim-Y
veterán
Sziasztok. Tök új vagyok SOAP-hoz.
node-dal szeretnék csinálni egy kliens-szerver példát. A kliensem megvan, kipróbáltam, működik. Jelenleg egy élő webservice-re csináltam meg, mert úgy ítéltem meg, hogy a klienst könnyebb megírni
var soap = require('soap');
var url = 'http://www.webservicex.net/CurrencyConvertor.asmx?WSDL';
var args = {FromCurrency: "HUF", ToCurrency: "EUR"};
soap.createClient(url, function(err, client) {
client.ConversionRate(args, function(err, rate) {
console.log(rate); // 0.0032 tadaam
});
});Utána álltam volna neki a szervernek, ezt a soap-server modullal próbáltam -> [link]
Igenám, de arról egy rohadt szó nem esik, hogy a WSDL fájlt hova, mikor, mire, minek? Szóval értitek, halvány lila gőzöm nincs, hogy a wsdl fájlal mit kell csinálni :/
Eddig ennyi van meg:
var soap = require('soap-server');
var names = ["Attila", "Gábor", "Péter", "Bálint", "Gergő"];
function RandomNameService(){}
RandomNameService.prototype.getRandomName = function(){
return names[Math.floor(Math.random()*5)];
};
var soapServer = new soap.SoapServer();
var soapService = soapServer.addService('randomNameService', new RandomNameService());
soapServer.listen(1337, '127.0.0.1');A neten se írnák ám le, hogy a wsdl fájlt hova kell tenni, hogy kell pontosan létrehozni etc :S
Az lenne még az ötletem, hogy megcsinálom a wsdl fájlt, azt kiszolgálom a klienseknek, a kliensek azt így elérik: http://127.0.0.1:1337/randomNameService?wsdl , ebben definiálva vannak az elérhető szervizek, amiket utána a kliensek már meg tudnak hívni.
[ Szerkesztve ]
-
-
Jim-Y
veterán
aha.. hát ez nem történik meg Mármint nem generál wsdl-t ... most két modulból építkezem:
Itt már van egy kis információcsíra arra, hogy hogyan szolgáljam ki a wsdl-t a kliensnek. Ellenben nincs WSDL példa.
Itt van wsdl példa, de nem írja le, hogy hogyan szolgáljam ki a wsdl-t
Most pont egy olyan WSDL-t próbálok írni, ami megfelel az első linken lévő soroknak, de van ami megzavar
Konkrétan:
var myService = {
MyService: {
MyPort: {
getRandomName: function() {
return names[Math.floor(Math.random()*5)];
}
}
}
}Itt a port és a service mintha fel lenne cserélve, ugyanis a wsdl-ben meg pont fordított sorrendben kell írni:
<portType name="randomNameService">
<operation name="getRandomName">
<input message="tns:getRandomName"/>
<output message="tns:returns_name"/>
</operation>
</portType>Az is jó lenne, ha rájönnék, hogy a fentebbi xml szeletnek milyen js objektum/függvény ? felel meg?
-
Karma
félisten
Akkor valamit nagyon rosszul tartasz, mert én lemásoltam a példakódot kis módosításokkal, és létre is jött a service meg a WSDL is.
C:\Users\Zsolt\Documents\soaptest>node
> var soap = require('soap-server');
undefined
> function test() {
... test.prototype.hello = function(name) {
..... return "Hello" + (name || "World") + "!";
..... }
... }
undefined
> var server = new soap.SoapServer();
undefined
> var service = server.addService('helloService', new test());
undefined
> server.listen(1337, '127.0.0.1');
undefinedEzután a http://127.0.0.1:1337/helloService?wsdl linken bejött a WSDL (kimásoltam).
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
Meg utána toszik működni, se VS2013-ból, se SoapUI-ból nem tudok ráhívni. Mondjuk 0.1.0, amit egyszer valaki kinyomott és azóta nem nyúlt hozzá...
Szerintem meg ez a szerver modul sose fog működni. Viszont ha meg tudod írni a WSDL-ed, a node-soap már bíztatóbbnak tűnik - legalábbis a kommentek alapján...
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
Sikerült összehoznom félig-meddig.
Ezzel az online WSDL generátorral csináltam a WSDL-t, értelemszerűen kitöltve a mezőket egy Hello World operationhöz. [WSDL].
Aztán így implementáltam a szervert hozzá:
var soap = require('soap');
var http = require('http');
var helloService = {
helloworld: {
helloworld_0: {
hello: function(args) {
return {
message: 'Hello ' + (args.name || 'World') + '!'
}
}
}
}
}
var wsdl = require('fs').readFileSync('hello.wsdl', 'utf8'),
server = http.createServer(function (req, resp) { resp.end("404 Not found: " + req.url) });
server.listen(8001);
soap.listen(server, '/helloService', helloService, wsdl);És erre SoapUI-ban rá tudtam csatlakozni, és még helyesen is működött
.NET-ben viszont nincs ekkora szerencsém, ott ProtocolExceptionnel elszáll. A SoapUI mock service-ével, amit ugyanebből a WSDL-ből generáltam, simán működik viszont.
---
Nekem nagyon az az érzésem, mint Android kapcsán is, hogy a SOAP egy régi idők letűnt megoldása, amit a mostani eszközökkel már nem kéne erőltetni. Akkor már egyszerűbb egy .NET/Java frontendet elérakni, ami JSON-re fordít mindent...
“All nothings are not equal.”
-
Jim-Y
veterán
Koszi. Igen ezt megtalaltam en is. Generaltattam is vele. Csak nalam nem sikerult osszeloni a javascriptes service strukturat a generalt wsdl-el:/ Este megnezem a megoldasod. Meg egyszer koszi megj: nekem is hasonloak az erzeseim a soap kapcsan mint neked. De az lenne a lenyeg, hogy lassak ilyet is:-) Csinaltam restes web servicet is, de azzal nem voltak problemak. Igazan egyszeru volt osszehozni.
-
Karma
félisten
Ha önszivatáson kívül tényleg látni akarsz ilyet, akkor javaslom Java alatt a CXF-et, .NET-nél meg a WCF-et. A valóságban úgyis ehhez hasonló szintű eszközök vannak a SOAP mögött - és még csak nem is nehéz használni őket alapszinten.
Illetve a magyar intraneteken előfordul az Axis 1.4 még mindig, pedig az általa használt kódolást már semmi se támogatja... Az külön élmény önmagában is.
[ Szerkesztve ]
“All nothings are not equal.”
-
martonx
veterán
"a SOAP egy régi idők letűnt megoldása, amit a mostani eszközökkel már nem kéne erőltetni"
Messzemenőkig egyetértek. Nekem a SOAP-pal a legnagyobb bajom, hogy nagyon nem kompatibilis, ahány nyelven, ahányféle SOAP megoldást használ az ember, annyiféle kimenetele lehet a dolognak. Plusz xml-ben kommunikál, aminél a Json már sokkal fejlettebb, tömörebb.
Megérett az elfeledésre, azonban sajnos még mindig rengeteg régi, jól beágyazott cucc ezt használjaÉn kérek elnézést!
-
Sk8erPeter
nagyúr
"Nekem nagyon az az érzésem, mint Android kapcsán is, hogy a SOAP egy régi idők letűnt megoldása, amit a mostani eszközökkel már nem kéne erőltetni."
Én is egyetértek a SOAP-os résszel, és amit martonx mond, az is igaz, ahány eszköz/nyelv, annyiféle kimenet, annyiféle idióta hiba.
Mondjuk az is hozzátartozik, hogy én különösen PHP+NuSOAP-pal való generálgatás során gyűlöltem meg (itt van szenvedéseim egy lenyomata), ezért természetesen már önmagában a PHP is hibáztatható, mint gyengén típusos nyelv (ergo nem lehet vele kattintásra generálni WSDL-t, mint Visual Studio-ban pl. C#-kódból), plusz a NuSOAP is, mint akkoriban elavult, rettentő szarul dokumentált library (nem tudom, most mi a helyzet vele, csak annyit láttam, hogy végül is 2013 júniusában még módosítottak rajta valamit). De az eredeti állításokon ez nem változtat, mert ha másféle library-t használtam, akkor meg más kimenetet kaptam. És akkor meg azt lehetett "debuggolni". Még ez a NuSOAP volt a legkezelhetőbb, amivel AKKORIBAN én találkoztam (azóta nem is SOAP-oztam szerencsére), pedig az elég szomorú (volt akkor mindenképp).De az Androiddal kapcsolatos részt nem értettem, hogy mire érted.
[ Szerkesztve ]
Sk8erPeter
-
martonx
veterán
válasz Sk8erPeter #3985 üzenetére
Ha jól rémlik a PHP-ban van valamiféle natív SOAP is, bár az talán még rosszabb, mint a nusoap. Tavaly év elején mintha kísérleteztünk volna velük.
Én kérek elnézést!
-
Karma
félisten
válasz Sk8erPeter #3985 üzenetére
"De az Androiddal kapcsolatos részt nem értettem, hogy mire érted."
Arra értem, hogy androidos fejlesztéshez túl nehezek azok a libraryk, amiket Java SE/EE alatt használnék, vagy éppen a frameworkből hiányoznak olyan csomagok, amiket aktívan használnának.
Illetve van olyan Android-specifikus megoldás, ami meg lábbalhajtós: kézzel írod meg minden egyes a requestet és SOAPObject tömbökön iterálgatsz a válasz összegyűjtéséhez...
Aztán a végén már ott állsz, hogy kézzel formázod össze az envelope-ot és kézzel parsolod ki az XML-ből az anyagot, és jobban jársz... Pedig ezt nagyon rühellem.
[ Szerkesztve ]
“All nothings are not equal.”
-
Sk8erPeter
nagyúr
Hmm, Androiddal kapcsolatban nincs fejlesztői tapasztalatom még, de jó ezeket tudni. Remekül hangzik.
(#3986) martonx :
Jaja, annak még borzalmasabb a dokumentációja. Legalább a NuSOAP-nak a kódjában található kommentárokból valamelyest ki tudtam következtetni, mi a helyzet. Ja, egyébként amikor néztem, tehát már 2,5 éve, akkor a kódja is finoman szólva hagyott némi kívánnivalót maga után (eleve vicces, hogy a kódját és az abban található kommenteket kellett tanulmányoznom, mert különben elakadtam). No mindegy, a franc sem akar SOAP-ozni. Csak ha muszáj, akkor meg olyan old school, mint manapság kazettán kölcsönadni valakinek egy zenét.Sk8erPeter
-
r4z
nagyúr
Sziasztok!
Lenne egy elég összetett problémám.
Adott egy XML adatbázis, amiből egy HTML táblázatba gyűjtöttem ki az adatokat jQueryvel. Eddig minden jól ment. Azonban minden elemhez tartozik két string típusú változó (str1 és str2), amikre igaz, hogy str1 és str2 első néhány karaktere megegyezik, az egyező részt kell kivennem sz str2 stringből.Ezt a két stringet kéne összehasonlítania egy (szerintem) while ciklusnak, és kiköpnie egy i-t, ahol az i annak a karakternek a sorszáma, ami utolsóként megegyezik a két stringben. Ezzel az i-vel substringgel már el tudnám választani a str2 két részét. A segítségeteket kérném a while ciklushoz.
Példa:
str1 -- str2 ------ i
alma -- aluljáró -- 2
sarok - sarokpolc - 5
kendő - kender ---- 4Ezen kívül egymás utáni rekordokban az str1 megegyezik, és az szeretném, hogy ugyanannyi (legkevesebb) karaktert válasszon ki nekik.
alma - aluljáró - 2
alma - almárium - 3
alma - alváz ---- 2Tehát 2 kell eredményül itt.
[ Szerkesztve ]
I don't love people. I love 911s, Astral Projection and french fries, in that order.
-
Jim-Y
veterán
Az elsőre egy félkész megoldás lehet például:
String.prototype.sameUntil = function(other) {
var cvar = (this.length < other.length ? this.length : other.length);
for(var i=0; i < cvar; ++i) {
if(this.charAt(i) != other.charAt(i)) {
return i;
}
}
return cvar;
}Azért félkész, mert a lehetséges buktatókat nem teszteltem ki, a példa adataidra jól működik, ha egyáltalán nem egyezik, akkor 0-t ad vissza. Illetve feltételezi, hogy az első karaktertől vett egyezést keresünk.
A második kérdést én sem értem igazán. Itt valahogy mindenképp csoportosítanod kéne az ugyanolyan str1-hez tartozó adatokat. Ha pl egy tömbbe tudod valahogy tenni az alma stringhez tartozó str2-ket, akkor
var almaArray = ["aluljáró", "almárium", "alváz"];
console.log(almaArray.map(function(elem) {
return "alma".sameUntil(elem);
}).reduce(function(prev, curr) {
return (prev < curr ? prev : curr);
}));// 2
De ha objektumba teszed, úgy is meg lehet oldani.
-
r4z
nagyúr
A másodiknak az a lényege, hogy az egy gyártótól származó italok márkanevei egységesen legyenek kiemelve (igen, ez a jQuery topikban lévő adatbázishoz kapcsolódik). Konkrétabban:
Gyártó:
Rockstar Energy
Italok:
Rockstar Energy Drink
Rockstar Punched Guava
Rockstar Recovery LimonadeAzt szeretném, hogy az elsőnél ne legyen kiemelve az Energy is, hanem egységesen csak a Rockstar mindnél.
Ezt a jQuery által lekérdezett ID-k alapján szerintem vissza lehetne keresni, csak ötletem sincs, hogyan kéne. A local- vagy sessionStorage talán segíthet, mondjuk hogy ha eltérő gyártó kerül oda, mint az felgyűlt, akkor hozza csak létre a bejegyzéseket a HTML táblában, és utána a localStorage-et üríti.
Jim-Y:
Köszi a kódot, az első biztosan jó lesz, mert mindig ugyanúgy kezdődik a két string. A másodikkal játszadozok picit.[ Szerkesztve ]
I don't love people. I love 911s, Astral Projection and french fries, in that order.
-
Karma
félisten
Hát, ez egy remek indikátora annak, hogy az adatforrásod nem fain. Nem utólag kéne kitalálnod, hogy egy fulltext mezőnek melyik része a gyártó, és hol kezdődik a termék...
Legalábbis semmiképp se a JS kódnak, hanem valami köztes résznek amivel a JS kommunikál.
Nade persze azzal kell főzni, ami van. Nekem is volt már ilyen bemenetem (autótípusok, pl. FIAT BRAVA xxxx yyyy... és ebből a FIAT-ot kellett leválogatnom). Végülis ez ugyanaz, de én shortcutot találtam hozzá: az első szót leveszem, a kéttagú neveket meg kontansként eltettem és kivételként kezelem. A hasznaltauto.hu jó forrás volt.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
De végülis megoldható, ha sorbarendezed az összes nevet, és ahogy végigmész rajtuk ciklusban, figyeled hogy az egyező szakasz szóhatáron ér-e véget (ugyanaz a gyártó), vagy az első szó közben (új gyártó kezdődik).
Kell egy objektum ahova gyűjtöd az eredményt ( gyártó -> termék[] ), meg az utoljára feldolgozott elem, és mehet.
Mondjuk az a para, hogy a Rockstar Energy Blue és Rockstar Energy Red stringekből az jön ki, hogy a gyártó "Rockstar Energy"
Fujj de utálom az ilyet...
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
Legközelebb lőjetek le hamarabb, ha elkezdek baromságokat írogatni
Az előző rant a gyártó meghatározásról irreleváns, mert a "DB"-ben megvan. A feladat egy kis adattranszformálás: csoportosítani a termékeket a gyártó szerint, majd gyártónként megkeresni az egyező szövegek minimumát, és ebből összeállítani egy objektumot, vagy valamit.
Ez az underscore.js segítségével pofonegyszerű.
Össze is dobtam JSFiddle-ön. Bátorkodtam annyit változtatni, hogy a bemenetet JSON-re átkonvertáltam regexekkel, és kis csalással csempésztem be az inputdata változóba.
A kimeneten látszik, hogy pl. a Rockstar Energy termékekben a közös rész a "Rockstar ". A 28 Blacknél meg semmi a Schwarze Dose miatt.
[ Szerkesztve ]
“All nothings are not equal.”
-
Sasos
senior tag
Sziasztok.
Egy program web felületéhez szeretném hozzáadni a magyar nyelvet. A sztringek fordítása folyamatban, működik is szépen de...
Adott egy script ami (ha jól értelmezem) megnézi az user oprendszerének nyelvi beállítását, és ha talál hozzá nyelvi fájlt, akkor automatikusan arra állítja be a weblap nyelvét, ha nem talál, akkor angol az alapértelmezett. Ehhez a scripthez hozzá is adtam a magyart (a scriptben lévő egyéb nyelvek alapján HTML ISO kódokat használva), így, ha a legördülőből kiválasztom, akkor dolgozik is szépen magyarul, de automatikusan nem állítja be. Valamint, ha beállítom mondjuk németre, akkor a HTML oldal nyelve is német lesz például a Chrome felismeri, hogy német és felajánlja a fordítást (ez minden nyelv esetén működik), de ha az általam hozzáadott magyart választom akkor az oldal nyelve angol lesz. Rálesne esetleg valaki, hogy hol lehet a gubanc?<script type="text/javascript" language="javascript">var g_nUserPlacement;var g_bOverrideUserPlacement=false;var g_nUserType;var aLangArray=OnSetLanguageDefault();var g_bLoggedIn=false;var g_nSessionOkay=0;var g_nSessNoLicRemoteAdmin=905;var g_sUserSessionId="";var LanguageCombo=CreateComboBox(aLangArray[0],aLangArray[1],["$ENGLISH$","$GERMAN$","$ITALIAN$","$FRENCH$","$SPANISH$","$PORTUGUESE$","$SERBIAN$","$SWEDISH$","$FINISH$","$NORWEGIAN$","$RUSSIAN$","$DANISH$","$SIMPLIFIED_CHINESE$","$TRADITIONAL_CHINESE$","$JAPANESE$","$HUNGARIAN$"],["en,US","de,DE","it,IT","fr,FR","es,ES","pt,PT","sr,SR","se,SE","fi,FI","no,NO","ru,RU","dk,DK","zh,CN","zh,TW","jp,JP","hu,HU"],"Language","Language",SetLangCookie,undefined,false,200,22,undefined);var nLangComboCnt=LanguageCombo.getItemCount();var PopUpLangCombo=LanguageCombo.getPopupTemplate();PopUpLangCombo.setStyle("height",((16*nLangComboCnt)+((AW.ie)?3:0))+"px");var g_sLang;function OnSetLanguageDefault(){var sBrowserLanguage=navigator.language?navigator.language:navigator.userLanguage;var sLangVal=readCookie('SULang');var aLanguage;var bLangBrowserSet=false;var sDefaultAdminLang="%LOGIN_PAGE_DEFAULT_LANGUAGE%";if((GetURLParameter("Language")!="")&&(GetURLParameter("Language")!="undefined"))sLangVal=GetURLParameter("Language");if(sLangVal==null||sLangVal==undefined||sLangVal==""){if(sDefaultAdminLang!="")sLangVal=sDefaultAdminLang;else sLangVal=sBrowserLanguage.replace("-",",");bLangBrowserSet=true;}if(sLangVal==null||sLangVal==undefined){sLangVal="";bLangBrowserSet=false;}switch(sLangVal.toLowerCase()){case"de,de":case"de":sText="$GERMAN$";sLangVal="de,DE";break;case"it,it":case"it":sText="$ITALIAN$";sLangVal="it,IT";break;case"fr,fr":case"fr":sText="$FRENCH$";sLangVal="fr,FR";break;case"es,es":case"es":sText="$SPANISH$";sLangVal="es,ES";break;case"pt,pt":case"pt":sText="$PORTUGUESE$";sLangVal="pt,PT";break;case"sr,sr":case"sr":case"sr,rs":case"sr,cs":sText="$SERBIAN$";sLangVal="sr,SR";break;case"se,se":case"se":sText="$SWEDISH$";sLangVal="se,SE";break;case"fi,fi":case"fi":sText="$FINISH$";sLangVal="fi,FI";break;case"no,no":case"no":sText="$NORWEGIAN$";sLangVal="no,NO";break;case"ru,ru":case"ru":sText="$RUSSIAN$";sLangVal="ru,RU";break;case"dk,dk":case"dk":sText="$DANISH$";sLangVal="dk,DK";break;case"jp,jp":case"ja,jp":case"jp":case"ja":sText="$JAPANESE$";sLangVal="jp,JP";break;case"zh,cn":sText="$SIMPLIFIED_CHINESE$";sLangVal="zh,CN";break;case"zh,tw":sText="$TRADITIONAL_CHINESE$";sLangVal="zh,TW";break;case"hu,hu":case"hu":sText="$HUNGARIAN$";sLangVal="hu,HU";break;default:sText="$ENGLISH$";sLangVal="en,US";bLangBrowserSet=false;break;}createCookie("SULang",sLangVal,60);aLanguage=[sText,sLangVal];if(bLangBrowserSet){g_sLang=sLangVal;setTimeout("OnReloadPage()");}else return(aLanguage);}function OnLogIn(bAutoLogin){LoadingDialog(false);ShowDialog("LoggingInDialog");var sLoginCmd="%FILE%Login.xml?Command=Login";var LogInRequest=CreatePostRequest(sLoginCmd);var sUserName,sPassWord,sLanguage;if(bAutoLogin){sUserName=decodeURIComponent(GetURLParameter("user"));if(GetURLParameter("password")!="")sPassWord=decodeURIComponent(GetURLParameter("password"));else sPassWord="fvjv@unknown.com";}else{if(!g_bIsLocalAdmin)sUserName=document.login.user.value;else sUserName="";sPassWord=document.login.pword.value;}sLanguage=LanguageCombo.getControlValue();LogInRequest.setParameter("user",sUserName);LogInRequest.setParameter("pword",sPassWord);LogInRequest.setParameter("language",sLanguage);LogInRequest.setRequestHeader("X-User-Agent",navigator.userAgent);LogInRequest.setAsync(true);LogInRequest.request();LogInRequest.response=function(XMLDoc){var nResult=GetXMLValueInt(XMLDoc,"result");var sResultText=GetXMLValue(XMLDoc,"ResultText");var sWelcomeMsg=GetXMLValue(XMLDoc,"welcomemsg");var bAllowFVJVLogin=(GetXMLValue(XMLDoc,"allowFVJV")=="1")?true:false;if(bAllowFVJVLogin)g_nUserPlacement=GetXMLValue(XMLDoc,"userplacement");else g_nUserPlacement=0;if(GetURLParameter("placement")!=""){g_nUserPlacement=parseInt(GetURLParameter("placement"));g_bOverrideUserPlacement=true;if((isNaN(g_nUserPlacement))||(g_nUserPlacement<0)||(g_nUserPlacement>3))g_nUserPlacement=2;}var bRequireEmailChange=(GetXMLValue(XMLDoc,"requireemailchange")=="1")?true:false;var bUserCanSetEmail=(GetXMLValue(XMLDoc,"usercansetemail")=="1")?true:false;var sUserEmail=GetXMLValue(XMLDoc,"useremail");g_nUserType=GetXMLValue(XMLDoc,"usertype");g_sUserSessionId=GetXMLValue(XMLDoc,"sessionid");if(nResult!=g_nSessionOkay&&nResult!=g_nSessNoLicRemoteAdmin){HideDialog("LoggingInDialog");if(nResult==202){if(bRequireEmailChange&&bUserCanSetEmail)OnShowSetEmailDialog(sUserEmail,function(){ChangePasswordDialog(true);},true);else ChangePasswordDialog(true);}else AlertDialog(GetResultText(nResult,"$LOGIN_FAIL_STR$",sResultText));}else{g_bLoggedIn=true;if(sWelcomeMsg!=""&&sWelcomeMsg!=undefined&&nResult!=g_nSessNoLicRemoteAdmin){HideDialog("LoggingInDialog");if(bRequireEmailChange&&bUserCanSetEmail){OnShowSetEmailDialog(sUserEmail,function(){WelcomeDialog(sWelcomeMsg.replace(new RegExp("\\n","g"),"<br>"),OnLoginOK);},true);}else WelcomeDialog(sWelcomeMsg.replace(new RegExp("\\n","g"),"<br>"),OnLoginOK);}else{if(bRequireEmailChange&&bUserCanSetEmail){OnShowSetEmailDialog(sUserEmail,function(){OnLoginOK(false,nResult);},true);}else OnLoginOK(false,nResult);}}};}function OnLoginOK(bReplace,nResult){var sPlacement="";var bAskUserBypass=true;createCookie("Session",g_sUserSessionId,1);if(bReplace==undefined)bReplace=true;if(g_bIsiPad)g_nUserPlacement=0;if((parseInt(g_nUserType)!=0)&&(nResult!=g_nSessNoLicRemoteAdmin)&&(!g_bOverrideUserPlacement))sPlacement="%LOGIN%";else{switch(parseInt(g_nUserPlacement)){case 0:sPlacement="%FILE%ListDir.htm";break;case 1:bAskUserBypass=false;g_bFVJVLicense=true;location.href="%COMMON_FILE%FVJVLoggedIn.htm";break;case 2:g_bFVJVLicense=true;if(bReplace)ReplaceDialog("WelcomeDialog","AskUserPlacementDialog");else ReplaceDialog("LoggingInDialog","AskUserPlacementDialog");PlacementOKButton.element().focus();bAskUserBypass=false;break;case 3:bAskUserBypass=false;location.href="%FILE%Share/Console.htm";break;}}if(bAskUserBypass){if(bReplace)ReplaceDialog("WelcomeDialog","LoggingInDialog");if(GetURLParameter("user")!="")sPlacement=sPlacement+GetBWCLoadParameters();window.location=sPlacement;}}function OnLoggedOut(){g_bLoggedIn=false;}function OnReloadPage(){var sReloadURL="%LOGIN%";if(g_bIsLocalAdmin)sReloadURL="%LOGIN%&LocalAdmin=1";if(GetURLParameter("user")!=""){sReloadURL=sReloadURL+"&user="+GetURLParameter("user");sReloadURL=sReloadURL+GetBWCLoadParameters();}if(GetURLParameter("password")!="")sReloadURL=sReloadURL+"&password="+GetURLParameter("password");if(readCookie("Language")==""&&g_sLang!=undefined)sReloadURL=sReloadURL+"&Language="+g_sLang;window.location.href=sReloadURL;}function SetLangCookie(){LoadingDialog(true);sLangValue=LanguageCombo.getItemValue(LanguageCombo.getSelectedItems());createCookie("SULang",sLangValue,60);if(!g_bIsLocalAdmin)createCookie("SUUserId",encodeURI(document.login.user.value),60);if(RememberMeCheckBox.getControlValue())createCookie("SURememberMe","true",60);else createCookie("SURememberMe","false",60);g_sLang=sLangValue;setTimeout("OnReloadPage()");}function RecommendIEUpgrade(){if(parseInt(readCookie('IERec'))!=1)AlertDialog('<p>$RECOMMEND_IE_UPGRADE_1$</p>$RECOMMEND_IE_UPGRADE_2$',true);createCookie("IERec",1,60);}if(g_bBrowserOk){document.getElementById("JavaWarning").style.display="none";document.getElementById("FormLayer").style.display="block";}else{document.getElementById("JavaWarningText").style.display="none";document.getElementById("JavaWarningReload").style.display="none";document.getElementById("BrowserWarningText").style.display="block";}if(!g_bIsLocalAdmin){document.getElementById("UserNameID").style.visibility="visible";if(g_bAllowRemember){document.getElementById("RememberUserID").style.visibility="visible";}var LoginIDInput=CreateInputField(g_UserName,"UserNameInput","user",undefined,200,20,false,OnValidate);}CreatePasswordField("","PasswordInput","pword",undefined,200,20,false,OnValidate);var g_sBrowserLanguageCheck=readCookie("SULang").replace("-",",");var objLoginButton=CreatePushButton("$LOGIN$","LoginButton",OnValidate);if(g_sBrowserLanguageCheck.toLowerCase()=="it,it")objLoginButton.setStyle("width","65px");else if(g_sBrowserLanguageCheck.toLowerCase()=="fr,fr")objLoginButton.setStyle("width","70px");var bRememberMe=false;if(readCookie('SURememberMe')=="true"&&g_bAllowRemember)bRememberMe=true;var RememberMeCheckBox=CreateCheckBox("$REMEMBER_USER$","remember","remember",bRememberMe,undefined,true);if(AW.gecko)RememberMeCheckBox.setStyle("height","12px");objLoginButton.onKeyEnter=function(){OnValidate();};if(document.getElementById("SULoginLogo"))LoadCustomImage(g_bDisableBranding,g_bHasCustomLogo);if(%SHOW_THEMES%&&document.getElementById("SULoginLogo"))LoadUserTheme();else SetActiveStyleSheet("system");if(parseInt(%ALLOW_PASSWORD_RECOVERY%)!=1){document.getElementById("PasswordRecoverImg").style.display="none";document.getElementById("PasswordRecoverTxt").style.display="none";$('#LoginTaskBar').css("display","none");$('.Bottom-Logos').addClass("Bottom-Logos-No-Toolbar");}else{$('#LoginTaskBar').css("display","block");$('.Bottom-Logos').removeClass("Bottom-Logos-No-Toolbar");}if(document.getElementById("CustomHTTPLoginText").innerHTML!=""){document.getElementById("CustomHTTPLoginText").innerHTML+="<hr style='height:1px;'>";document.getElementById("CustomHTTPLoginText").style.display="block";}if(%SHOW_LANGUAGE%)document.getElementById("LangContainer").style.display="block";LoadErrorMessage("ErrMsg","logout","$LOGGED_OUT_MSG$");if(document.getElementById("Login-Wrapper")){var nOffsetLogin=0;var nLoginWrapperheight=(document.getElementById("Login-Wrapper").style.pixelHeight)?document.getElementById("Login-Wrapper").style.pixelHeight:document.getElementById("Login-Wrapper").offsetHeight;document.getElementById("Login-Wrapper").style.height=(nLoginWrapperheight)+"px";document.getElementById("Login-Wrapper").style.marginTop="-"+((nLoginWrapperheight/2)-nOffsetLogin)+"px";}if(g_bIsiPad&&LoginIDInput!=undefined)LoginIDInput.getContent("box/text").element().setAttribute('autocapitalize','off');</script>
-
Karma
félisten
-
Karma
félisten
Mert ezt így el tudod olvasni?
Valahogy így kellett volna kezdeni: [link]Viszont így is még elég nagy falat elsőre megemészteni, inkább pár kötelező kör:
- A böngésződben a Console-t nézted, nem lett ott hibaüzenet amikor a nyelvváltást próbálgattad?
- Nézted, hogy a böngésző jó nyelvet ad-e a navigator.language alatt?
- Cookie-kat töröltél, mielőtt nekiálltál átírni? (Hátha befolyásolja a régebbi változat.)“All nothings are not equal.”