Jquery data.map不是一个函数
我的头撞到了一个我无法解决的错误上。我有以下几点: JSON 以及下面的jQueryJquery data.map不是一个函数,jquery,json,Jquery,Json,我的头撞到了一个我无法解决的错误上。我有以下几点: JSON 以及下面的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 =
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源代码。上一个没有
{“products”:【】括号前的部分。这是我不喜欢的吗?JavaScript中的{}
对象没有.map()
方法。它只用于,[]
因此,为了使您的代码正常工作,请将data.map()
更改为data.products.map()
,因为products
是一个可以迭代的数组。data
不是数组,它是一个包含产品数组的对象,因此可以迭代data.products
var allProducts = data.products.map(function (item) {
return new getData(item);
});
调用$.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]);
};
});
});
函数getData(数据){
this.productID=data.product\u id;
this.productData=data.product\u数据;
this.imageID=data.product\u data.image\u id;
this.text=data.product_data.text;
this.link=data.product\u data.link;
this.imageUrl=data.product\u data.image\u url;
}
$.getJSON(“json.json?sdfsdfg”).done(函数(数据){
var allPosts=$.map(数据、函数(项){
对于(变量i=0;i
代码中的错误是在AJAX调用中执行了return
,因此只执行了一次。迭代对象的正确方法是
Object.keys(someObject).map(function(item)...
Object.keys(someObject).forEach(function(item)...;
// ES way
Object.keys(data).map(item => {...});
Object.keys(data).forEach(item => {...});
您始终可以执行以下操作:
const SomeCall = request.get(res => {
const Store = [];
Store.push(res.data);
Store.forEach(item => { DoSomethingNeat
});
});
如果你想映射一个对象,你可以使用Lodash。只要确保它是通过NPM或Thread安装的,然后导入即可
使用Lodash:
Lodash提供了一个函数\ mapValues
,用于映射值并保留键
_.mapValues({ one: 1, two: 2, three: 3 }, function (v) { return v * 3; });
// => { one: 3, two: 6, three: 9 }
数据需要是Json对象,为此请确保:
data = $.parseJSON(data);
现在,您可以执行以下操作:
data.map(function (...) {
...
});
我希望这对某些人有所帮助最简单的答案是将“数据”放在一对方括号中(即[data]):
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 ) } )
这里,[data]是一个数组,可以在上面使用“.map”方法。它对我有用!请不要再捶你的头了-我们将完成这个…map.data或data.map?有时你可能在寻找值而不是键>对象。值(someObject)。map(函数(项)…//代替KeyHello Fernando,欢迎访问Stack Overflow!这是一个纯英语的网站。我已经编辑掉了你答案中没有用英语发布的部分。请随意翻译并重新添加。我知道它是如何工作的,非常感谢我遇到了同样的问题在数据之前有一行,这不是简单地创建一个只有一个数据的新数组吗元素-您的原始对象?为什么需要映射它?var data={foo:'bar'};[data].map(函数(项){console.log(项);})是的,它只需要创建一个只有一个数据元素的新数组。这没什么错。需要映射的不是我。需要映射的是特定的项目。如果需要映射,但您的数据不是数组,则会出现错误。将其转换为数组只会更改其格式,而不是其值,这正是e项目需要。我可能缺少一些东西。在我看来,您的示例在没有映射的情况下也会做同样的事情:$.getJSON(“json/products.json”).done(函数(数据){var allProducts=new getData(数据);})
@WilliamHou让我用一个类比来解释这个问题。OP有一个锁箱,他需要帮助打开,但只有一个坏了的锤子。你不是给他钥匙,而是建议他把锁箱放在一个木箱里,然后用锤子砸碎这个木箱。是的,他现在用了锤子,但他仍然有钥匙原始问题——一个锁定的锁箱。这是一个毫无意义的解决方案,客观上在问题的上下文中是不正确的。答案是使用数据.products.map
,而不是将数据
包装在一个数组中。您的答案会导致整个数据
对象被传递到获取数据
,这显然需要将data.products
中的元素作为其输入,而不是整个数据对象。当到达像this.imageID=data.product\u data.image\u id;
这样的行时,您的答案将导致程序崩溃。即使不是这样,在数组中分层任意对象以便map
可用仍然是没有意义的。
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 ) } )
$.getJSON("json/products.json").done(function (data) {
var allProducts = [data].map(function (item) {
return new getData(item);
});
});