检查数组是否有重复项,如果有,我需要改变原始项并删除最后一个重复项

时间:2017-10-07 19:54:22

标签: javascript arrays angular

我使用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
}

由于我没有想法或者长时间盯着这段代码,所以非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用关于数组Array.indexOf(item)Array.prototype.lastIndexOf(item)

的javascript buildin函数
if(Array.indexOf(item) == Array.prototype.lastIndexOf(item)) {
    // change value in position given by indexOf
    // delete last index
}

答案 1 :(得分:1)

在添加项目之后,您需要检查重复的项目,而不是删除项目,

您可以使用.filter

检查重复的项目
var duplicates = this.shoppingCart.filter(this.product_name ==='yourSampleName');
if(duplicates && duplicates.length > 0){
//add items here 
 this.shoppingCart.push(whatever);
}