数组findIndex()函数 - 无法读取未定义

时间:2017-08-29 17:44:54

标签: javascript angular

我正在尝试在Angular2中实现addtoCart函数。 我使用的是typescript类来表示一个LineItem,它代表产品以及数量和总价格(数量*产品价格)。

export interface Product {
  id?: number;
  name?: string;
  price?: number;
}

订单项:

export class LineItem {
  product: Product;
  quantity: number;
  totalPrice: number;
}

订单项数组:

lineItems: LineItem[];

除了购物车功能,我想检查项目是否已添加,如果是,只需查找与产品对应的订单项并更新该特定订单项。

我选择的方法是: - 找到索引。 - 如果是> -1,则添加新订单项。 - 否则编辑订单项。

问题是:当我试图找到索引时,它会显示此错误

Cannot read property 'id' of undefined

代码是:

  addProductToCart(product: any, quantity: number) {
    const lineItem: LineItem = Object.assign({}, product);
    lineItem.quantity = quantity;
    lineItem.totalPrice = product.price * quantity;
    const index = this.lineItems.findIndex( (item) => {
       return item.product.id === product.id
    });
    if(index > -1) {
      // edit the current item .
      this.lineItems[index].quantity = quantity;
      this.lineItems[index].totalPrice = quantity * product.price;

    }else {
      this.lineItems.push(lineItem);
    }
  }

第一次调用没有错误,第二次调用抛出错误。 这是问题:

  const index = this.lineItems.findIndex( (item) => {
       return item.product.id === product.id
    });

item.product.id throws:无法读取未定义的属性“id”。

是typecript类或接口或任何逻辑错误。

1 个答案:

答案 0 :(得分:-1)

const lineItem: LineItem = Object.assign({}, product);

此行结果为普通对象:

lineItem = {ProductID: 1, ProductName: "Chai", UnitPrice: 18, quantity: 2}

因此没有item.product.id对象链的简单普通对象

PLUNKER