Array Pushen bei Objekten

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

EuroCent

Klappstuhl 2.0
Hallo zusammen,

aktuell sitze Ich an folgendem Problem:

Javascript:
if($('#ul_an li').length > 0) {
    $('#ul_an').each(function(k, v) {
        //console.log("VALUE", [v.childNodes]);
        for(var i = 0; i <= (v.childNodes.length - 1); i++) {
            console.log(v.childNodes[i].dataset.id);
            //reportArray.push({an_i: v.childNodes[i].dataset.id});
        }
    });
}

Die abfrage geht sicherlich auch einfacher, aber die hatte Ich aktuell nicht im Kopf. :)

Meine Frage ist, wie bekomme die anzahl + inhalt in das reportArray?

Dies wird aber so nicht gehen: reportArray.push({an_i: v.childNodes.dataset.id}); :(

Hat hier jemand einen Tipp? :)
 

ComFreek

Mod | @comfreek
Moderator
Dies wird aber so nicht gehen: reportArray.push({an_i: v.childNodes.dataset.id}); :(
Warum nicht? Natürlich musst du reportArray vorher als Variable deklarieren und ein leeres Array zuweisen.

Ich habe dir mal eine einfachere Lösung gebastelt: jQuery addClass example - JSFiddle

Javascript:
const result = $('#ul_an li').map(function () {
 return this.dataset.id;
});
// Do whatever you want with result
console.log(result);

Es nutzt jQuery(...).map, welche wohl intern jQuery.map benutzt. Leider (?) hat letztere Funktion ein anderes Verhalten als Array.prototype.map aus nativem JS, nämlich dass wenn der Callback undefined oder null zurückgibt, dass der Wert ignoriert wird.
Sprich: Probier mal data-id bei zweiten <li> zu entfernen. Dann wird this.dataset.id undefined für dieses <li> zurückgeben. Dann hätte ich ['Hello', undefined] erwartet, zurück kommt aber ['Hello'].
 

EuroCent

Klappstuhl 2.0
Warum nicht? Natürlich musst du reportArray vorher als Variable deklarieren und ein leeres Array zuweisen.

Ich habe dir mal eine einfachere Lösung gebastelt: jQuery addClass example - JSFiddle

Javascript:
const result = $('#ul_an li').map(function () {
return this.dataset.id;
});
// Do whatever you want with result
console.log(result);

Es nutzt jQuery(...).map, welche wohl intern jQuery.map benutzt. Leider (?) hat letztere Funktion ein anderes Verhalten als Array.prototype.map aus nativem JS, nämlich dass wenn der Callback undefined oder null zurückgibt, dass der Wert ignoriert wird.
Sprich: Probier mal data-id bei zweiten <li> zu entfernen. Dann wird this.dataset.id undefined für dieses <li> zurückgeben. Dann hätte ich ['Hello', undefined] erwartet, zurück kommt aber ['Hello'].

Das hab Ich bereits getan.
Auch oben vergessen es mit hinzu schreiben, Sorry :/

Javascript:
var reportArray = new Array();
if($('#ul_an li').length > 0) {
    $('#ul_an').each(function(k, v) {
        //console.log("VALUE", [v.childNodes]);
        for(var i = 0; i <= (v.childNodes.length - 1); i++) {
            console.log(v.childNodes[i].dataset.id);
            //reportArray.push({an_i: v.childNodes[i].dataset.id});
        }
    });
}

Bei der data-id die wird immer mitgeliefert und kann demnach nicht leer sein. Da dies vor ausgefüllt wird. :)

Aber wie spreche Ich es am ende an?
Mittels PHP spreche es dann beispielsweise $var->KEY an.
Wie ist es mit der Mapping-Methode? :)
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…