data.map एक फ़ंक्शन नहीं है


110

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

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


72
कृपया अपने सिर को कभी भी न काटें - हम इसके माध्यम से प्राप्त करेंगे ...
मार्क सी।

map.data या data.map?
डेपरर्म

जवाबों:


186

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

काम परिवर्तन करने के लिए अपने कोड के क्रम में तो data.map()करने data.products.map()के बाद से productsएक सरणी जो तुम पर पुनरावृति कर सकते हैं।


Iwow यह काम करता है, बहुत बहुत धन्यवाद मैं एक ही मुद्दे थे डेटा से पहले एक पंक्ति थी
अनूप PS

63

वस्तुओं पर पुनरावृति करने का सही तरीका है

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

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

जानकारी के लिए यहां पढ़ें


10
कभी-कभी आप मानों की तलाश कर रहे होते हैं न कि चाबियाँ> Object.values ​​(someObject) .map (फंक्शन (आइटम) ... // की बजाए कीज़ की
राम

7

सरल जवाब डाल करने के लिए है "डाटा" वर्ग कोष्ठक की एक जोड़ी में (यानी [डेटा] ):

     $.getJSON("json/products.json").done(function (data) {

         var allProducts = [data].map(function (item) {
             return new getData(item);
         });

     });

यहां, [डेटा] एक सरणी है, और इस पर ".map" विधि का उपयोग किया जा सकता है। इससे मेरा काम बनता है! यहाँ छवि विवरण दर्ज करें


क्या यह केवल एक डेटा तत्व के साथ एक नया सरणी नहीं बनाता है - आपकी मूल वस्तु? आपको उस नक्शे को बनाने की आवश्यकता क्यों है? var data = {foo: 'bar'}; [data].map(function (item) { console.log(item); });
एपिकवॉयज

हां, यह केवल एक डेटा तत्व के साथ एक नया सरणी बनाता है। उसके साथ कुछ भी गलत नहीं है। ऐसा नहीं है कि मुझे नक्शे की जरूरत है। यह विशिष्ट परियोजना है जिसे मैप करने की आवश्यकता है। यदि इसे मैप करने की आवश्यकता है, लेकिन आपका डेटा एक सरणी नहीं है, तो एक त्रुटि होगी। इसे एक सरणी में परिवर्तित करने से इसका स्वरूप बदल जाता है, न कि इसका मान, और यही परियोजना की जरूरत है।
विलियम होउ

मुझे कुछ याद आ रहा है। यह मुझे लगता है कि आपका उदाहरण नक्शे के बिना एक ही काम करेगा:$.getJSON("json/products.json").done(function (data) { var allProducts = new getData(data); });
एपिकवॉयज

मेरा मूल उत्तर बहुत, बहुत, बहुत सरल है - यह केवल डेटा को एक सरणी में बदलने के लिए है, ताकि न केवल "data.map एक फ़ंक्शन है" त्रुटि DISAPPEAR, बल्कि इससे भी महत्वपूर्ण बात यह है कि, .map विधि भी होगी। सही परिणाम उत्पन्न करने के लिए काम करें। और कुछ नहीं।
विलियम होउ

"EpicVoyage" - समस्या यह है कि आप इस प्रश्न को नहीं समझते हैं। मूल प्रश्न "data.map एक फ़ंक्शन नहीं है", और कृपया पृष्ठ के शीर्ष पर जाएं और इस पर एक नज़र डालें। यह मेरा प्रोजेक्ट नहीं है। मैं दोहराता हूं: यह मेरा उद्देश्य नहीं है। यह कैसे तय करना है "data.map एक फ़ंक्शन नहीं है" ERROR।
विलियम होउ

4

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

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

हाय मुझे वही त्रुटि मिली, क्या आप इसे देख सकते हैं .. stackoverflow.com/questions/57834351/…
hafizi hamid

1

यदि आप किसी ऑब्जेक्ट को मैप करना चाहते हैं तो आप Lodash का उपयोग कर सकते हैं। बस यह सुनिश्चित करें कि यह एनपीएम या यार्न के माध्यम से स्थापित है और इसे आयात करें।

लोदाश के साथ:

लोदाश _.mapValuesमानों को मैप करने और कुंजियों को संरक्षित करने के लिए एक फ़ंक्शन प्रदान करता है ।

_.mapValues({ one: 1, two: 2, three: 3 }, function (v) { return v * 3; });

// => { one: 3, two: 6, three: 9 }


0
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 ) } )

हैलो फर्नांडो, और ढेर अतिप्रवाह में आपका स्वागत है! यह एक अंग्रेजी-केवल साइट है। मैंने आपके उत्तर का वह भाग संपादित कर दिया है जो अंग्रेजी में पोस्ट नहीं किया गया था । बेझिझक इसका अनुवाद करें और इसे फिर से जोड़ें।
विक्स द विजार्ड ऑफ़ द व्हेल्स

0

डेटा को Json ऑब्जेक्ट होना चाहिए, ऐसा करने के लिए कृपया निम्नलिखित का पालन करें:

data = $.parseJSON(data);

अब आप कुछ ऐसा कर सकते हैं:

data.map(function (...) {
            ...
        });

मुझे उम्मीद है कि यह कुछ मदद करेगा


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

        });

    }); 

आपके कोड में त्रुटि यह थी कि आपने returnअपने AJAX कॉल में किया था, इसलिए इसे केवल एक बार निष्पादित किया गया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.