Javascript Typescript:find for array函数正在工作,但如果我检查它是否';如果使用if语句返回一个值,则它不会';行不通

Javascript Typescript:find for array函数正在工作,但如果我检查它是否';如果使用if语句返回一个值,则它不会';行不通,javascript,arrays,typescript,find,Javascript,Arrays,Typescript,Find,我有以下代码: class Cart { private currentCart: item[]; constructor(private pService: ProductService) { this.currentCart = []; } add(product) { if (this.currentCart.find((i) => i.product === product) != undefined) { this.current

我有以下代码:

class Cart {

  private currentCart: item[];

  constructor(private pService: ProductService) {
    this.currentCart = [];
  }

  add(product) {
    if (this.currentCart.find((i) => i.product === product) != undefined) {
      this.currentCart[
        this.currentCart.findIndex((i) => i.product === product)
      ].increaseAmount();
    } else {
      this.currentCart.push(new item(product));
    }
  }
}

class Item {
  product: any;

  amount: number;

  constructor(product) {
    this.product = product;
    this.amount = 1;
  }
  
  increaseAmount() {
    this.amount++;
  }

  decreaseAmount() {
    this.amount--;
  }
}

我的问题是,我第一次激活add函数时,它工作了,它创建了一个新项目,第二次,如果我发送的产品与我以前发送的产品相同,它不应该是未定义的,因为它确实存在,但它没有输入if语句,它直接转到else并生成一个新项目,它有相同的产品。

我想您应该通过唯一的标识符来检查产品的平等性,而不是产品本身

在JavaScript中检查对象的问题是:

console.log({}=={});//假的
对。一个对象不等于一个对象,除非它是完全相同的对象。查看您的代码,似乎您的产品对象应该是相同的,因为对象是通过引用传递的,但可能是TypeScript类构造函数的引擎盖下发生了一些事情,导致对象不相同。或者可能是代码中的其他地方导致它们不存在。无论如何,最好通过产品的唯一id检查产品,如(简化代码):

添加(产品){
if(this.currentCart.find(item=>item.product.id==product.id)){
this.currentCart[this.currentCart.findIndex(item=>item.product.id==product.id)].increaseAmount();
}否则{
此.currentCart.push(新项目(产品))
}
}

如果你的产品上没有唯一的ID,你当然应该考虑添加一些。

最好在代码中留下什么类型的代码:代码>产品< /代码>?你确定
product===product
是真的吗?ChrisG是一个来自不同服务的对象,是的,我确信它是正确的,因为我把它记录了下来,它准确地显示了我插入的内容