Objektum értékeinek kiolvasása egy ciklus alapján
2019-04-08T13:07:11+02:00
2019-04-09T11:32:06+02:00
2022-07-19T02:45:45+02:00
juzzie
Sziasztok!

Lenne egy problémám, ami egy hibásan megírt interfész miatt gondokat okoz.

Egy bizonyos alkalmazásban egy partner kiválasztó dialogban kiválasztott tetszés szerinti embereket, kell listáznom. Mindenkinek van azonosítója, neve, címe, stb. Ezt egy JSON-ban kapom meg, amit feldolgozok (parse), ezért kapok egy objektumot (data).

Ciklussal simán feltudom olvasni, pl.:

for (i = 0; i < data.lenght; i++) { log.info(data[i].id); log.info(data[i].nev); log.info(data[i].stb); }
A megkapott értékeket én szépen kiírom Excelbe (ASPOSE) és kész. Ez mind tökéletesen működik.

Egy új igény alapján módosítanom kell ezt úgy, hogy egy konfigurációs tömbből megkapom a fejléceket is, amihiez illeszkedniük kell az adatoknak. A fejlécadatok sem névben, sem számosságban, sem sorrendben nem illenek össze az én data objektumommal... Példa: columns = ["FIELD01", "FIELD02", "FIELD03", "FIELD04"]

Miként tudnám ezt valahogyan párosítani? A konfigurációban nem lehet (ez kikötés...). Vegyek egy sörétes puskát és intézzem el azt, aki az interfészt írta?

Gondoltam én ilyesmire:

pairing = { id: "FIELD01", nev: "FIELD02", stb: "FIELD03" }
keys = Object.keys(pairing);
values = keys.map(function(key) {
  partnerKeys.push(pairing[key]);
});

for (i = 0; i < columns.length; i++) {
  index = partnerKeys.indexOf(columns);
if (index == -1) { orderly = "none";
} else { orderly = keys[index];
} } log.info("::: orderly: " + orderly.join(", "));

A segítséget előre is köszönöm, a puskát és a lőszert betudom szerezni, de jobb volna ezt JavaScript-ben megoldani... :)
Mutasd a teljes hozzászólást!
Nyilván azt nem úszod meg, hogy valahol összepárosítsd az ő neveiket a tieiddel. Ha máshol nem, hát a kódodban le kell tárolnod. (Vagy megtárgyalod a "túloldallal", hogy ez hogy gondolták meg mégis mit szeretnének látni az egyes mezőkben.)

Ha semmi rugalmasságot nem mutat a másik fél, akkor max. annyit tudok javasolni, hogy fordítsd meg a mapping objektumodat, mert úgy egyszerűbb lehet a kód:

var pairing = { "FIELD01": "id", "FIELD02": "nev", "FIELD03": "stb", "FIELD04": undefined }; var columns = Object.keys(pairing); for (var i = 0; i < columns.length; i++) { var columnName = columns[i]; var value = data[pairing[columnName]]; if (value === undefined) { value = "none"; } log.info("column: " + columnName + " value: " + value); }
Ami mezőhöz sosincs értelmes adatod, ott undefined-hoz mappeled a mező nevét.
Mutasd a teljes hozzászólást!

  • Szerintem ez nem igazán programozási kérdés.
    A kért mezőneveket (fejléc konfig) valahogy muszáj lesz megfeleltetni a saját struktúráddal (data).
    Annak, aki (vagy ami) összerakja ezt a konfigot tudnia kell, hogy milyen adatok állnak rendelkezésre. Egyszerűen meg kell állapodni (fel kell map-elni), hogy a "field01" pl. a "teljes név" adatot jelenti, a "field02" pedig pl. a címet... stb.
    Lehet, hogy erre van valami formálisabb "megfogalmazási mód" is, mint pl. XML esetén az XSD.

    Szerk:
    most látom, hogy már válaszoltak, és a kulcs ott is egy egyszerű mapping.
    Mind1, most már itt hagyom az enyémet is :)
    Mutasd a teljes hozzászólást!
  • Köszönöm a választ! Erre én sem gondoltam elsőre, hogy fordítsuk meg, nem csak a kevesebb kód miatt, hanem a számosság miatt. FIELD mezőkből jóval több van, ami nem is a partner adatokat írja le. Így kevésbé kell később hozzányúlni!
    Mutasd a teljes hozzászólást!
  • Köszönöm Neked is a választ. Annyit szerettem volna elérni, hogy a kapott JSON-ban az adatokhoz való párosítás már eleve a cél mezőkhöz kapcsolódjon:

    data.FIELD01
    data.FIELD02
    data.FIELD03
    ...

    Ami azt jelenti, hogy a párosítás már ott megtörténne, de hasztalan volt a felvetésem...

    Köszönöm mégegyszer a segítőkészséget!

    Üdv.
    Mutasd a teljes hozzászólást!
abcd