2015-06-12 6 views
22

मैं एक त्रुटि के खिलाफ अपने सिर को झुका रहा हूं जिसे मैं ठीक करने के तरीके से बाहर नहीं कर सकता। मेरे पास निम्नलिखित है;data.map फ़ंक्शन नहीं है

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 एक समारोह के रूप अपरिभाषित है हो रही है? इसे देखकर मुझे नहीं पता कि क्या काम नहीं कर रहा है क्योंकि मैंने इसे पहले इस्तेमाल किए गए कोड से एक नई परियोजना में कॉपी किया है। जेसन स्रोत एकमात्र चीज अलग है। पिछले किसी के पास {"उत्पाद" नहीं था: [] ब्रैकेट से पहले भाग। क्या यह मुझे फेंक रहा है?

+3

कृपया अपने सिर अब और नहीं मार नहीं है - हम के माध्यम से मिल जाएगा यह ... –

+0

map.data या data.map? – depperm

उत्तर

40

वस्तुओं, {}, जावास्क्रिप्ट में विधि .map() यह Arrays केवल के लिए, [] है नहीं है,।

तो data.map() से data.products.map()products के बाद से आपके कोड को काम करने के लिए products एक सरणी है जिसे आप फिर से चालू कर सकते हैं।

1

data एक सरणी, यह उत्पादों की एक सरणी के साथ एक वस्तु इतनी अधिक data.products

var allProducts = data.products.map(function (item) { 
    return new getData(item); 
}); 
-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 बनाया है, इसलिए इसे केवल एक बार निष्पादित किया गया।

11

वस्तुओं से अधिक पुनरावृति के लिए सही रास्ता

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

कभी-कभी आप मानों की तलाश नहीं कर सकते हैं > ऑब्जेक्ट.वैल्यूज़ (someObject) .map (फ़ंक्शन (आइटम) ... // कुंजी के बजाय – Ram

0

तुम हमेशा निम्न कर सकते हैं है:

const SomeCall = request.get(res => { 

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

Store.forEach(item => { DoSomethingNeat 
}); 
}); 
संबंधित मुद्दे