2011-09-17 32 views
5

Tôi có dữ liệu này:cách đối chiếu một loạt từ điển thành từ điển của mảng?

list = [ 
     {name:'apple', category: "fruit", price: 1.22 }, 
     {name:'pear', category: "fruit", price: 2.22 }, 
     {name:'coke', category: "drink", price: 3.33 }, 
    {name:'sprite', category: "drink", price: .44 }, 
    ]; 

Và tôi muốn tạo một từ điển keyed trên thể loại, có giá trị là một mảng có chứa tất cả các sản phẩm của thể loại đó. nỗ lực của tôi để làm điều này thất bại:

var tmp = {}; 
    list.forEach(function(product) { 
     var idx = product.category ; 
     push tmp[idx], product; 
    }); 
    tmp; 
+2

'push tmp [idx], sản phẩm;' không phải là JavaScript hợp lệ, không có gì lạ khi nó không thành công. –

Trả lời

5
function dictionary(list) { 
    var map = {}; 
    for (var i = 0; i < list.length; ++i) { 
     var category = list[i].category; 
     if (!map[category]) 
      map[category] = []; 
     map[category].push(list[i].name); // add product names only 
     // map[category].push(list[i]); // add complete products 
    } 
    return map; 
} 
var d = dictionary(list); // call 

Bạn có thể thử nghiệm nó trên jsfiddle.

Các vấn đề liên quan