Ich schlage meinen Kopf gegen einen Fehler, den ich nicht beheben kann. Ich habe folgendes;
JSON
{"products":
[
{
"product_id" : "123",
"product_data" : {
"image_id" : "1234",
"text" : "foo",
"link" : "bar",
"image_url" : "baz"
}
},{
"product_id" : "456",
"product_data" : {
"image_id" : "1234",
"text" : "foo",
"link" : "bar",
"image_url" : "baz"
}
}
]}
und die folgende jQuery
function getData(data) {
this.productID = data.product_id;
this.productData = data.product_data;
this.imageID = data.product_data.image_id;
this.text = data.product_data.text;
this.link = data.product_data.link;
this.imageUrl = data.product_data.image_url;
}
$.getJSON("json/products.json").done(function (data) {
var allProducts = data.map(function (item) {
return new getData(item);
});
});
Ich erhalte dennoch die Fehlermeldung, dass map.data als Funktion undefiniert ist. Wenn ich es mir anschaue, weiß ich nicht, was nicht funktioniert, da ich dies aus zuvor verwendetem Code in ein neues Projekt kopiert habe. Das einzige, was anders ist, ist die JSON-Quelle. Der vorherige hatte das {"products":
Teil nicht vor den [] Klammern. Ist es das, was mich abschreckt?
Antworten:
Objekte
{}
in JavaScript haben die Methode nicht.map()
. Es ist nur für Arrays ,[]
.Damit Ihr Code funktioniert, ändern Sie sich
data.map()
in,data.products.map()
daproducts
es sich um ein Array handelt, auf dem Sie iterieren können.quelle
Der richtige Weg, um Objekte zu durchlaufen, ist
Lesen Sie hier für Details
quelle
Die einfachste Antwort ist, "Daten" zu setzen in ein Paar eckiger Klammern (dh [Daten] ) zu setzen:
Hier ist [data] ein Array, auf dem die ".map" -Methode verwendet werden kann. Für mich geht das!
quelle
data
ist kein Array, sondern ein Objekt mit einem Array von Produktendata.products
quelle
Wenn Sie ein Objekt zuordnen möchten, können Sie Lodash verwenden. Stellen Sie einfach sicher, dass es über NPM oder Garn installiert ist, und importieren Sie es.
Mit Lodash:
Lodash bietet eine Funktion
_.mapValues
zum Zuordnen der Werte und zum Beibehalten der Schlüssel.quelle
Sie können immer Folgendes tun:
quelle
quelle
Die Daten müssen Json-Objekte sein. Stellen Sie dazu Folgendes sicher:
Jetzt können Sie so etwas tun wie:
Ich hoffe das hilft jemandem
quelle
Beim
$.map()
Aufrufen ist ein Fehler aufgetreten. Versuchen Sie Folgendes:Der Fehler in Ihrem Code war, dass Sie ihn
return
in Ihrem AJAX-Aufruf gemacht haben, sodass er nur einmal ausgeführt wurde.quelle