[JS]JSON.stringify vrací null

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Václav M. 24. 8. 2020 12:51

Dobrý den,

mám jednoduché asociativní pole, které mi funkce print_r z projektu PHPJS (nyní Locutus) normálně vypíše jako
Kód: Vybrat vše
Array ( [2012] => 413.81199999999995
[2013] => 962.721999999999
[2014] => 935.9479999999998
[2015] => 429.854
[2016] => 27.599
[2017] => 83.513
[2018] => 297.2149999999999
[2019] => 69.307
[2020] => 110.54000000000002 )


Když chci toto pole zpracovat pomocí JSON.stringify, dostanu jen řadu nul, tedy hodnot null. A vůbec nemám tušení proč.

Tedy, sice si myslím, že problém může být ve způsobu vytvoření toho pole (a zadání hodnot obzvláště), ale nejsem si jistý.
Kód: Vybrat vše
var Roky = new Array();

$('tr[id^="ID"]').each(function ()
{
   var Rok = $(this).attr('class');
   Rok = explode("\x20", Rok);
   Rok = trim(Rok[0], 'R');

   if($.inArray(Rok, Roky) === -1)
   {
      Roky.push(Rok);
   }
});

var Kilometry = new Array();

var CisloRoku = 0;
for(CisloRoku = 0; CisloRoku < Roky.length; CisloRoku++)
{
   var Rok = Roky[CisloRoku];
   var PocetJizdZaRok = $('tr.R' + Rok).length;

   var CisloJizdy = 0;
   for(CisloJizdy = 0; CisloJizdy <= PocetJizdZaRok; CisloJizdy++)
   {
      var Delka = $('tr.R' + Rok + ' td.DelkaJizdy').eq(CisloJizdy).text();

      if(!Kilometry[Rok])
      {
         Kilometry[Rok] = Number(Delka);
      }
      else
      {
         Kilometry[Rok] += Number(Delka);
      }
   }
}

protože new Array() mám použité i v případě pole z předchozího téma, ale tam JSON.stringify problémy nedělá.
Kód: Vybrat vše
var Jizdy = new Array();

$('tr[id^="ID"]').each(function ()
{
   var Datum = $(this).find('td.Datum').text();
   Jizdy[Jizdy.length] = Datum;
});
Václav M.
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 26. 8. 2020 07:50

A jak to pole opravdu vypadá? Myslím tím výpis pomocí čistého JS a ne upravený nějakými knihovnami.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Just_jo 26. 8. 2020 18:57

Přesně - nejtěžší na práci programátora je odlaďování.
Je potřeba umět používat debugger, resp. konzoli. Hledat a zkoušet podle toho co to dělá a co to má dělat.
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Doggg 27. 8. 2020 10:04

Školy nemám ale výrok dostanu seznam nul tedy null, snad pravdivý není, ne?
Doggg
Junior

Odeslat příspěvekod Just_jo 27. 8. 2020 16:46

Školu taky nemám - jsem mechanik seřizovač - operátor CNC strojů.
Ale programování mě začalo zajímat už v 7. třídě na stroji Amiga.

Nicméně - použití v JS "console.log(Rok)" resp. "console.log(Roky)" již něco napoví.
Stejně tak výpis "console.log($(this))" ti řekne, jestli máš správný výběr.
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Václav M. 27. 8. 2020 21:33

Just_jo píše:Nicméně - použití v JS "console.log(Rok)" resp. "console.log(Roky)" již něco napoví.

Ve výpisu z console.log aby se čert vyznal.

A to, co jsem z toho vyčetl, mi stejně nic moc neřeklo. Spousta (ale nechápu, proč) prázdných položek. A teprve poté položky, které jsem tam uložit chtěl.

A položky, které jsem uložit chtěl, ukazoval ve stejné podobě jako funkce print_r z projektu ex-PHPJS.

Doggg píše:Školy nemám ale výrok dostanu seznam nul tedy null, snad pravdivý není, ne?

Vím, že null není nula. Proto jsem to také dal do kurzívy. Ale tak nějak jsem čekal, že se někdo na tu větu chytí - a bude řešit jí (místo toho zbytku).

Stejně jako další lidé řeší konvence a jiné věci, které nemají s funkčností kódu nic společného.

:arrow:
Chyba může (ale nemusí) být v tom, že nejprve projdu všechny záznamy a zjistím, které roky mám v záznamech použity a poté záznamy procházím ještě jednou - a sčítám kilometry pro jednotlivé roky. Jasně, že (by) se to asi dalo sloučit, ale v době, kdy jsem toto zpracování psal, mi to takhle přišlo lepší.

Spíše je mi divné, že se tato chyba objevila až teď, kdy jsem chtěl toto zpracování upravit tak, aby byl výpis veden přes AJAX. Původní řešení výpisu totiž nebylo zrovna nejšťastnější (jelikož vyžadovalo příliš pozornosti kódu v místě, kam se měl výpis vložit).

:arrow:
Ale jinak jsem to už vyřešil - podle rady z SO (StackOverflow) pomocí
Kód: Vybrat vše
Kilometry = Object.assign({}, Kilometry);

ale tedy, že by se mi to chtělo vkládat všude (kde nebude fungovat základní kód), to se říct nedá.

:arrow:
Když jsem kód upravil a vynechal získání seznamu roků, tak se mi ve výpisu objevily ty prázdné položky - konkrtétně roky 0 až 2011. Ale nechápu to, protože když zadávám položky způsobem
Kód: Vybrat vše
Promenna[Klic] = Hodnota

tak by v poli měly být pouze položky s těmi klíči, které jsem mu zadal. Jenže mě tam přidává položky s klíči, které jsem nepoužil - ale bez přiřazených hodnot.
Václav M.
Junior
Uživatelský avatar

Odeslat příspěvekod Doggg 28. 8. 2020 07:19

Uuu ty jsi tak sofistikovaný a protrely!
Doggg
Junior

Odeslat příspěvekod Just_jo 28. 8. 2020 09:38

Ještě bych dodal, pro PHP raději používám var_dump s modulem xdebug.
To ti dá přesnou informaci o tom jak je definovaná array v PHP.

Nechápu ten explode v JS - proč zrovna \x20 ?

Bohužel bez představy co a jak posílá PHP, jak vypadá HTML a co leze do výběru z jQuery nelze nic moc poradit. Chce to umět používat konzoli ( běžně používám G Chrome, ale prý je FF lepší ) a krokovat.
Tj. ověřit si každý krok, jestli odpovídá tomu co tam má být.
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Václav M. 28. 8. 2020 17:31

Just_jo píše:Nechápu ten explode v JS - proč zrovna \x20 ?

Mezera. Možná zbytečné, ale užitečné - když si chci být jistý, že je úmyslná, nikoliv překlep.

Protože datum jízdy je otištěno i do atributu class - podobě R#### M## D##. Byla to taková pomůcka pro některé výpočty, včetně tohoto.
Václav M.
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků