[jquery] 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 => {...});

자세한 내용은 여기를 참조하세요.


답변

가장 간단한 대답은 “데이터” 를 한 쌍의 대괄호 (예 : [data] ) 에 넣는 것입니다 .

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

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

     });

여기에서 [data] 는 배열이며 “.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 }


답변

언제든지 다음을 수행 할 수 있습니다.

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