ডেটা.ম্যাপ কোনও ফাংশন নয়


110

আমি একটি ত্রুটির বিরুদ্ধে আমার মাথা ধাক্কা দিচ্ছি আমি কীভাবে ঠিক করব তা কার্যকর করতে পারি না। আমি নিম্নলিখিত আছে;

জেএসওএন

{"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);
    });
});

তবুও আমি একটি ত্রুটি পাচ্ছি যে মানচিত্র.ডাটা একটি ফাংশন হিসাবে অপরিজ্ঞাত? এটির দিকে তাকিয়ে আমি জানি না কী কাজ করছে না কারণ আমি এটি আগের ব্যবহৃত কোড থেকে একটি নতুন প্রকল্পে অনুলিপি করেছি। কেবল আলাদা জিনিসটি হল JSON উত্স। আগেরটির {"products":[] বন্ধনীগুলির আগে অংশ ছিল না । এটাই কি আমাকে ফেলে দিচ্ছে?


72
দয়া করে আপনার মাথায় আর আঘাত করবেন না - আমরা এর মধ্য দিয়ে যাব ...
মার্ক সি।

map.data বা data.map?
ডিপ্রিম

উত্তর:


188

অবজেক্টস, {}জাভাস্ক্রিপ্টে পদ্ধতি নেই .map()। এটা তোলে কেবল এর অ্যারেগুলির , []

কাজ পরিবর্তনের আপনার কোড করার জন্য তাই data.map()করতে data.products.map()যেহেতু productsএকটি অ্যারের যা আপনার উপর পুনরুক্তি করতে পারেন।


iwow এটি কাজ করে, অনেক অনেক ধন্যবাদ আমার একই সমস্যা ছিল ডেটার আগে একটি সারি ছিল
অনুপ পিএস

64

বস্তুর উপর পুনরাবৃত্তি করার সঠিক উপায় হ'ল

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
কখনও কখনও আপনি কীগুলি> অবজেক্ট.ভেলিউজ (সাময়িক অবজেক্ট)। মানচিত্র (ফাংশন (আইটেম) ... // কীগুলির পরিবর্তে মানগুলি সন্ধান করতে পারেন
রাম

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); });
এপিকভয়েজ

আমার মূল উত্তরটি খুব, খুব, খুব সহজ - এটি কেবলমাত্র ডেটাটিকে একটি অ্যারে রূপান্তরিত করার জন্য, যাতে কেবল "ডেটা.ম্যাপটি কোনও ফাংশন নয়" ত্রুটি ত্রুটিযুক্ত হবে না, তবে আরও গুরুত্বপূর্ণ,। ম্যাপ পদ্ধতিটিও সঠিক ফলাফল উত্পাদন করতে কাজ। আর কিছু না.
উইলিয়াম হাউ

"এপিকভয়েজ" - সমস্যাটি হ'ল আপনি প্রশ্নটি বুঝতে পারছেন না। মূল প্রশ্নটি "ডেটা.ম্যাপ কোনও ফাংশন নয়" এবং দয়া করে পৃষ্ঠার শীর্ষে যান এবং এটি একবার দেখুন at এটি আমার প্রকল্প নয়। আমি আবার বলছি: এটি আমার প্রকল্প নয়। এটি কীভাবে "ডেটা.ম্যাপ কোনও ফাংশন নয়" ERROR ঠিক করবেন।
উইলিয়াম হাউ

4

data একটি অ্যারে নয়, এটি এমন পণ্যগুলির অ্যারে যুক্ত যাতে পুনরাবৃত্তি হয় data.products

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

হাই আমি একই ত্রুটিটি পেয়েছিলেন, আপনি এটি .. তাকান পারেন stackoverflow.com/questions/57834351/...
hafizi হামিদ

1

আপনি যদি কোনও বস্তুর মানচিত্র করতে চান তবে আপনি লোডাশ ব্যবহার করতে পারেন। এটি নিশ্চিত হয়ে নিন যে এটি এনপিএম বা সুতার মাধ্যমে ইনস্টল করা হয়েছে এবং এটি আমদানি করুন।

লোদাশ সহ:

লোড্যাশ _.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

ডেটা জসন অবজেক্ট হওয়া দরকার, এটি করতে দয়া করে নিম্নলিখিতটি নিশ্চিত করুন:

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আপনার কোডটিতে ত্রুটিটি হ'ল আপনি নিজের এজেএক্স কল করেছেন, সুতরাং এটি কেবলমাত্র একবার কার্যকর হয়েছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.