我正在抨击一个错误,我无法解决如何解决问题.我有以下几点;
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"
}
}
]}
Run Code Online (Sandbox Code Playgroud)
和以下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);
});
});
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误,map.data未定义为函数?看着它我不知道什么没有工作,因为我已经从以前使用的代码复制到一个新项目.唯一不同的是json源.前一个没有{"产品":在[]括号之前的部分.这是什么让我失望?
小智 45
迭代对象的正确方法是
Object.keys(someObject).map(function(item)...
Object.keys(someObject).forEach(function(item)...;
// ES way
Object.keys(data).map(item => {...});
Object.keys(data).forEach(item => {...});
Run Code Online (Sandbox Code Playgroud)
Wil*_*Hou 10
最简单的答案是将“数据”放入一对方括号中(即[data]):
$.getJSON("json/products.json").done(function (data) {
var allProducts = [data].map(function (item) {
return new getData(item);
});
});
Run Code Online (Sandbox Code Playgroud)
这里,[data]是一个数组,可以对它使用“.map”方法。这个对我有用! 
data不是一个数组,它是一个包含产品数组的对象,因此迭代data.products
var allProducts = data.products.map(function (item) {
return new getData(item);
});
Run Code Online (Sandbox Code Playgroud)