Je me critique contre une erreur que je n'arrive pas à résoudre J'ai ce qui suit;
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"
}
}
]}
et le jQuery suivant
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);
});
});
Pourtant, j'obtiens une erreur indiquant que map.data n'est pas défini en tant que fonction? En le regardant, je ne sais pas ce qui ne fonctionne pas car j'ai copié ceci dans un nouveau projet à partir de code précédemment utilisé. La seule chose différente est la source JSON. Le précédent n'avait pas la {"products":
partie avant les crochets []. Est-ce cela qui me dérange?
Réponses:
Les objets,
{}
en JavaScript, n'ont pas la méthode.map()
. Il est seulement pour des tableaux ,[]
.Donc, pour que votre code fonctionne, changez
data.map()
endata.products.map()
puisqueproducts
est un tableau sur lequel vous pouvez itérer.la source
La bonne façon d'itérer sur les objets est
Lisez ici pour plus de détails
la source
La réponse la PLUS SIMPLE est de mettre «données» entre crochets (c'est-à-dire [données] ):
Ici, [data] est un tableau, et la méthode ".map" peut être utilisée dessus. Ça marche pour moi!
la source
data
n'est pas un tableau, c'est un objet avec un tableau de produits donc itérer surdata.products
la source
Si vous souhaitez mapper un objet, vous pouvez utiliser Lodash. Assurez-vous simplement qu'il est installé via NPM ou Yarn et importez-le.
Avec Lodash:
Lodash fournit une fonction
_.mapValues
pour mapper les valeurs et conserver les clés.la source
Vous pouvez toujours effectuer les opérations suivantes:
la source
la source
les données doivent être des objets Json, pour ce faire, assurez-vous que les éléments suivants:
Vous pouvez maintenant faire quelque chose comme:
J'espère que cela aidera quelqu'un
la source
Il y a une erreur lors de l'
$.map()
invocation, essayez ceci:L'erreur dans votre code était que vous avez fait
return
dans votre appel AJAX, donc il ne s'est exécuté qu'une seule fois.la source