我正在抨击一个错误,我无法解决如何解决问题。我有以下内容;
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"
}
}
]}
以及以下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);
});
});
但是我收到一个错误,map.data未定义为函数?看着它我不知道什么没有工作,因为我已经从以前使用的代码复制到一个新项目。唯一不同的是json源。前一个没有{“产品”:在[]括号之前的部分。这是什么让我失望?
答案 0 :(得分:99)
对象{}
没有方法.map()
,它只适用于Arrays,[]
。
因此,为了让您的代码能够更改data.map()
到data.products.map()
,因为products
是一个可以迭代的数组。
答案 1 :(得分:35)
迭代对象的正确方法是
Object.keys(someObject).map(function(item)...
Object.keys(someObject).forEach(function(item)...;
// ES way
Object.keys(data).map(item => {...});
Object.keys(data).forEach(item => {...});
答案 2 :(得分:3)
data
不是数组,它是一个包含产品数组的对象,因此迭代data.products
var allProducts = data.products.map(function (item) {
return new getData(item);
});
答案 3 :(得分:0)
您可以随时执行以下操作:
const SomeCall = request.get(res => {
const Store = [];
Store.push(res.data);
Store.forEach(item => { DoSomethingNeat
});
});
答案 4 :(得分:0)
如果要映射对象,可以使用Lodash。只需确保已通过NPM或Yarn安装并导入它即可。
与Lodash:
Lodash提供了一个函数_.mapValues
来映射值并保留键。
_.mapValues({ one: 1, two: 2, three: 3 }, function (v) { return v * 3; });
// => { one: 3, two: 6, three: 9 }
答案 5 :(得分:0)
数据必须是Json对象,为此,请确保遵循以下条件:
data = $ .parseJSON(data);
现在您可以执行以下操作:
data.map(function(...){ ... });
我希望这对某些人有帮助
答案 6 :(得分:0)
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 ) } )
答案 7 :(得分:-1)
$.map()
调用时出错,请尝试以下操作:
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.json?sdfsdfg").done(function (data) {
var allPosts = $.map(data,function (item) {
for (var i = 0; i < item.length; i++) {
new getData(item[i]);
};
});
});
您的代码中的错误是您在AJAX调用中创建了return
,因此它只执行了一次。
答案 8 :(得分:-1)