Je me frappe la tête contre une erreur, je ne peux pas résoudre le problème. J'ai le suivant;
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 je reçois une erreur 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 je l'ai copié dans un nouveau projet à partir de code utilisé précédemment. La seule chose différente est la source JSON. Le précédent n'avait pas les {"produits": partie avant les crochets []. Est-ce que c'est ça qui me jette?
Objets, {}
, en JavaScript n'a pas la méthode .map()
, c'est seulement pour Arrays , []
.
Donc, pour que votre code fonctionne, changez data.map()
en data.products.map()
puisque products
est un tableau sur lequel vous pouvez effectuer une itération.
La bonne façon de parcourir les objets est
Object.keys(someObject).map(function(item)...
Object.keys(someObject).forEach(function(item)...;
// ES way
Object.keys(data).map(item => {...});
Object.keys(data).forEach(item => {...});
data
n'est pas un tableau, c'est un objet avec un tableau de produits, donc itérer sur data.products
var allProducts = data.products.map(function (item) {
return new getData(item);
});
this.$http.get('https://pokeapi.co/api/v2/pokemon')
.then(response => {
if(response.status === 200)
{
this.usuarios = response.data.results.map(usuario => {
return { name: usuario.name, url: usuario.url, captched: false } })
}
})
.catch( error => { console.log("Error al Cargar los Datos: " + error ) } )
Vous pouvez toujours faire ce qui suit:
const SomeCall = request.get(res => {
const Store = [];
Store.Push(res.data);
Store.forEach(item => { DoSomethingNeat
});
});
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.
_.mapValues({ one: 1, two: 2, three: 3 }, function (v) { return v * 3; });
// => { one: 3, two: 6, three: 9 }
data doit être un objet Json, veuillez vous assurer de ce qui suit:
data = $ .parseJSON (data);
Maintenant, vous pouvez faire quelque chose comme:
data.map (function (...) { ...});
J'espère que cela aidera quelqu'un