所以我正在开发一个允许用户点击供应商的模块。将有超过1项。
因此,每次用户点击特定商品的供应商时,我都会将供应商名称和价格添加到javascript数组中。
假设用户选择了所有供应商后,供应商数组将包含
vm.vendor = [
{checked:true, name : "Vendor 1", price: 1},
{checked:true, name : "Vendor 2", price: 2},
{checked:true, name : "Vendor 2", price: 3},
]
我想列出供应商的总购买量。所以我想重复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 :(得分:0)
我会在推送功能之前添加一个检查以查看供应商是否已经在列表中。如果是,则添加价格而不是推送新对象。此外,您应该使用id或键来引用它们,以避免在最后一个循环中循环。
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)
}
}
}
}
}
}