Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery data.map不是一个函数_Jquery_Json - Fatal编程技术网

Jquery data.map不是一个函数

Jquery 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 =

我的头撞到了一个我无法解决的错误上。我有以下几点:

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 = 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);
         });

     });