2015-06-12 35 views
22

Tôi bashing đầu chống lại lỗi Tôi không thể tìm ra cách khắc phục. Tôi có những điều sau đây;data.map không phải là chức năng

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" 
     } 
    } 
]} 

và sau đây 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); 
    }); 
}); 

chưa tôi nhận được một lỗi mà map.data là undefined như một chức năng? Nhìn vào nó tôi không biết whats không làm việc như tôi đã sao chép này vào một dự án mới từ mã được sử dụng trước đó. Điều duy nhất khác nhau là nguồn json. Phần trước không có {"sản phẩm": phần trước dấu ngoặc []. Đây là những gì ném tôi đi?

+3

Xin đừng bash đầu của bạn nữa - chúng tôi sẽ nhận được thông qua này ... –

+0

map.data hoặc data.map? – depperm

Trả lời

40

Đối tượng, {}, trong JavaScript không có phương pháp .map(), nó chỉ cho Arrays, [].

Vì vậy, để mã của bạn hoạt động thay đổi data.map() thành data.products.map() kể từ products là một mảng mà bạn có thể lặp lại.

1

data không phải là một mảng, nó là một đối tượng với một loạt các sản phẩm để lặp qua data.products

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

Có một lỗi trên $.map() gọi, hãy thử này:

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

     }); 

    }); 

Các lỗi trong mã của bạn là bạn đã thực hiện return trong cuộc gọi AJAX của mình, vì vậy nó chỉ thực hiện một lần.

11

Cách đúng để lặp qua các đối tượng là

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

đôi khi bạn có thể đang tìm kiếm các giá trị không phải là khóa > Object.values ​​(someObject) .map (hàm (mục) ... // thay vì khóa – Ram

0

Bạn luôn có thể làm như sau:

const SomeCall = request.get(res => { 

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

Store.forEach(item => { DoSomethingNeat 
}); 
}); 
Các vấn đề liên quan