2016-11-29 51 views
0

所以我正在開發一個允許用戶單擊供應商的模塊。將有超過1個項目。如果檢索到相同的數據,則操作JavaScript數組對象(AngularJS)

因此,每次用戶點擊特定商品的供應商時,我都會將供應商名稱和價格添加到一個javascript數組中。

假設用戶已經選擇了所有的廠商後,廠商陣列將包括

vm.vendor = [ 
    {checked:true, name : "Vendor 1", price: 1}, 
    {checked:true, name : "Vendor 2", price: 2}, 
    {checked:true, name : "Vendor 2", price: 3}, 
] 

我想列出下來的供應商合計的採購。所以我想ng-重複vm.vendor,然後列出供應商名稱和總價格。

但是,在上面的情況下,它會列出供應商2,2次。我如何才能實現

vendor 1 => total price : 1, 
vendor 2 => total price : 5 

我該如何操作數組,當用戶要添加另一個供應商已經存在的數組?

這裏是我的代碼,使用戶能夠將供應商添加到新陣列

function chooseVendor(item, vendor, index) { 
vm.vendor = []; 

for(var i = 0; i < vm.request_area.length; i++){ 
    for(var x = 0; x < vm.request_area[i].details.length; x++){ 
    for(var y = 0; y < vm.request_area[i].details[x].vendor_list.length; y++){ 
     if(vm.request_area[i].details[x].vendor_list[y].checked == true){ 
      vm.vendor.push(
       vm.request_area[i].details[x].vendor_list[y] 
      ) 
     } 
    } 
    } 
} 
} 

回答

0

我想補充一個檢查,看看如果供應商在列表中已經只是你的推送功能之前。如果是,請添加價格而不是推送新對象。你也應該使用一個id或者key來引用它們,以避免在最後一個循環中循環。

function chooseVendor(item, vendor, index) { 
    vm.vendor = []; 

    for(var i = 0; i < vm.request_area.length; i++){ 

     for(var x = 0; x < vm.request_area[i].details.length; x++){ 

      var vendor_list = vm.request_area[i].details[x].vendor_list; 

      for(var y = 0; y < vendor_list.length; y++){ 

       var vendor = vm.request_area[i].details[x].vendor_list[y]; 

       if(vendor.checked == true){ 
        var name = vendor.name; 
        var existing = vendor_list.filter(function(vendor){ 
         return vendor.name == name; //could also use an id which would probably be better 
        }); 

        if(!existing){ 
         //if you know the index of the vendor in the 
         //vm.vendor array, you can access directly without 
         //this loop 
         for(var z = 0; z < vm.vendor.length; z++){ 
          var this_vendor = vm.vendor[z]; 
          if(this_vendor.name == name) this.vendor.price += vendor.price; 
         } 
        } else { 
         vm.vendor.push(vendor) 
        } 

       } 

      } 
     } 
    } 
} 
相關問題