2017-10-07 58 views
1

我正在使用Angular作爲我的框架。每當數組發生變異時,我都會調用函數。每次調用這個函數時,我需要檢查數組是否有重複的項目,如果需要,我需要編輯原始項目並從數組中刪除最後一項。檢查數組是否有重複的項目,如果它確實比我需要改變原始項目並刪除最後一個重複項目

我在建購物車。所以當重複的項目被添加到數組時,我需要更改原始項目中的數量值並刪除最後一個推送項目。

組件功能:

ngDoCheck() { 
    var changes = this.differ.diff(this.shoppingCart); // check for changes 
    if (changes) { 
     clearTimeout(this.timer); 
     this.cartOpen = true; 
     this.itemsInCart = this.numberOfItemsinCart(this.shoppingCart); 
     this.cartTotal = this.totalCartAmount(this.shoppingCart); 

    //check if this.shoppingCart has a duplicate item 
    //if array does have a duplicate 
    //change qty value in original item and 
    //remove the last item added 

    } 
} 

我的對象比如數組:

{ 
    "id": 6, 
    "product_name": "name of product", 
    "sku": "26-008b", 
    "description": "description of product", 
    "product_link": "link", 
    "cat_id": "categoryId", 
    "cat_name": "Category name", 
    "related_products": [], 
    "sub_cat_name": "sub category name", 
    "price": price, 
    "qty": 1 
} 

任何幫助將不勝或理解,因爲我的想法,在此代碼一直盯着太久。

+0

控制之前的複製,並相應地插入新記錄到陣列或更新現有的r ecord是合理的。 –

+1

在這裏看到我的答案。如果有幫助,請檢查我的答案:https://stackoverflow.com/questions/46087273/angular-2-remove-duplicate-values-from-an-array –

回答

1

您可以使用JavaScript的buildin功能有關數組Array.indexOf(item)Array.prototype.lastIndexOf(item)

if(Array.indexOf(item) == Array.prototype.lastIndexOf(item)) { 
    // change value in position given by indexOf 
    // delete last index 
} 
1

而不是增加後去除項目,你需要添加它之前檢查重複項,

你可以檢查重複項使用.filter

var duplicates = this.shoppingCart.filter(this.product_name ==='yourSampleName'); 
if(duplicates && duplicates.length > 0){ 
//add items here 
this.shoppingCart.push(whatever); 
}