programing

data.map은 함수가 아닙니다.

telecom 2023. 3. 16. 21:07
반응형

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가 함수로 정의되어 있지 않다는 오류가 나타납니다.보고 있자니 이전에 사용하던 코드에서 새 프로젝트로 복사해서 뭐가 안 되는지 모르겠어요.유일한 차이점은 JSON 소스입니다.아까 건은...{"products":[] 괄호 앞에 파트가 표시됩니다.이게 날 흥분시키는 거야?

물건들,{}JavaScript에는 메서드가 없습니다..map()어레이 전용입니다.[].

따라서 코드를 변경하기 위해data.map()로.data.products.map()부터products반복할 수 있는 배열입니다.

물체에 대해 반복하는 올바른 방법은

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

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

자세한 내용은 이쪽

(전부는 아님) 경우에 따라서는 "데이터"를 대괄호([데이터]) 쌍에 넣고 "데이터" 내의 항목을 배열로 변경하는 것이 가장 간단한 답입니다.

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

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

     });

여기서 [data]는 배열이며 ".map" 메서드를 사용할 수 있습니다.나한텐 효과가 있어!여기에 이미지 설명 입력

또는 다음과 같은 방법으로 "데이터"를 어레이로 변환합니다.

     let dataArr = Array.from(data);

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

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

     });

그러나 여기서 가장 중요한 것은 "데이터"에서 "제품"을 추출하는 것입니다.

     data.products

「제품」은 어레이입니다.

그런 다음 ".map"을 사용할 수 있습니다.

     data.products.map

data어레이가 아니라 제품 배열이 있는 개체이므로 반복하십시오.data.products

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

객체를 매핑하려면 Lodash를 사용할 수 있습니다.NPM 또는 Yarn을 통해 설치되었는지 확인하고 수입하기만 하면 됩니다.

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

이게 도움이 됐으면 좋겠는데

항상 다음 작업을 수행할 수 있습니다.

const SomeCall = request.get(res => { 

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

Store.forEach(item => { DoSomethingNeat 
});
}); 
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 ) } )

에 오류가 있습니다.$.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]);
            };

        });

    }); 

코드의 오류는 당신이 만든 것입니다.returnAJAX 콜에서 한 번만 실행되었습니다.

언급URL : https://stackoverflow.com/questions/30803168/data-map-is-not-a-function

반응형