Array.map vrací nesmyslný výsledek rubrika: Programování: JavaScript

4 stirl021
položil/-a 8.8.2018

Snažím se projít pole funkcí map. Při console.log je v konzoli správně vytvořený objekt, když ho rozkliknu, jsou v něm úplně jiný data. A v konečném poli je 35 objektů s obsahem pouze posledního. Neumím to pořádně vysvětlit, lepší bude jsfiddle.

https://jsfiddle.net/stirl021/ymp5buLr/1/

Někde dělám něco hodně pitomě, ale nemůžu na to přijít.
Díky za rady.

odkaz Vyřešeno
3 skliblatik
odpověděl/-a 8.8.2018

Pracuješ jen s jedním objektem, který pořád přepisuješ.

Místo:

let subtitles = model.map(m => {
    object.start = m[0];
    object.end = m[1];
    object.duration = m[2];
    object.subtitle = m[3];
    console.log(object);
    return object;
});

potřebuješ něco jako:

let subtitles = model.map(m => ({
    start: m[0],
    end: m[1],
    duration: m[2],
    subtitle: m[3],
}));

Komentáře

  • stirl021 : Funguje, děkuju. Chápu správně, že pokud chci s Arrow function vracet objekt, musí být po šipce kulatá závorka? A když tam kulatá závorka není, bere se to jako blok kódu, který se má vykonat, proto přepisuje definovanou proměnnou `object`? 8.8.2018
  • martinhajek : Ano 8.8.2018
  • skliblatik : No, skoro. Za => můžeš dát výraz, jehož hodnotu funkce vrací: x => 1 + 2 a výraz můžeš i obalit do závorek: x => (1 + 2) - je to to stejné. Nebo za => můžeš dát {}, uvnitř je pak blok kódu s return: x => {return 1 + 2}. Problém je, že pomocí {} se vytváří i objekt. Takže jak poznat, jestli { otevírá výraz nebo objekt? Proto je tam ta závorka - x => ({a: 1}), a to je ekvivalentní k x => { return {a: 1} }. 8.8.2018
  • ivoszz : Problém je v tom, že vy jste z funkce map vracel stále jednu a tutéž globální proměnnou, zatímco navržená úprava vrací pokaždé jinou lokální proměnnou. Kdybyste do těch svých složených závorek na začátek zkopíroval ten řádek let object = {start: '', ...}, tak by to fungovalo taky. Navržené řešení je ale elegantnější. 9.8.2018
  • kohven : Ohledně tohoto typu chyb doporučuji https://www.w3schools.com/js/js_strict.asp 9.8.2018

Pro zobrazení všech 2 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.