2015-06-12 22 views
22

Sto sbattendo la testa contro un errore che non riesco a capire come risolvere. Ho il seguente;data.map non è una funzione

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" 
     } 
    } 
]} 

e il seguente 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); 
    }); 
}); 

ancora sto ottenendo un errore che map.data è definito come una funzione? Guardandolo non so cosa non ha funzionato come ho copiato questo in un nuovo progetto dal codice precedentemente utilizzato. L'unica cosa diversa è la fonte JSON. Il precedente non aveva i {"prodotti": parte prima delle parentesi []. È questo che mi sta buttando via?

+3

Si prega di non colpire la testa più - otterremo attraverso questo ... –

+0

map.data o data.map? – depperm

risposta

40

oggetti, {}, in JavaScript non ha il metodo .map(), è solo per Arrays, [].

Quindi, affinché il vostro codice funzioni, cambiare data.map() a data.products.map() poiché products è un array su cui è possibile eseguire l'iterazione.

1

data non è un array, è un oggetto con una gamma di prodotti così iterare data.products

var allProducts = data.products.map(function (item) { 
    return new getData(item); 
}); 
-1

C'è un errore in $.map() invocazione, provate questo:

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

     }); 

    }); 

L'errore nel codice è stato effettuato return nella chiamata AJAX, quindi è stato eseguito una sola volta.

11

Il modo giusto per iterare su oggetti è

Object.keys(someObject).map(function(item)... 
Object.keys(someObject).forEach(function(item)...; 

// ES way 
Object.keys(data).map(item => {...}); 
Object.keys(data).forEach(item => {...}); 

Read here for details

+1

a volte potresti cercare valori non chiavi > Object.values ​​(someObject) .map (function (item) ... // invece di keys – Ram

0

È sempre possibile effettuare le seguenti operazioni:

const SomeCall = request.get(res => { 

const Store = []; 
Store.push(res.data); 

Store.forEach(item => { DoSomethingNeat 
}); 
});