我正在使用以下代码,并得到如下错误:
错误: 错误TS2345:类型'(item:any)=> void'的参数不能分配给类型'(value:any,index:number,obj:any [])=> boolean'的参数。 不能将“ void”类型分配给“ boolean”类型。
代码:
addToCart(product) {
if (!this.productArr.length) {
this.productArr.push(product);
} else {
let flag = false;
this.productArr.find((item: any) => {
if (item.name === product.name) {
item.count = product.count;
flag = true;
}
});
if (!flag) {
this.productArr.push(product);
}
}
this.cartService.addToCart(this.productArr);
}
任何想法我们如何解决?
答案 0 :(得分:0)
regexp
将addToCart(product) {
if (!this.productArr.length) {
this.productArr.push(product);
} else {
let flag = false;
this.productArr.forEach((item: any) => { // change this line
if (item.name === product.name) {
item.count = product.count;
flag = true;
}
});
if (!flag) {
this.productArr.push(product);
}
}
this.cartService.addToCart(this.productArr);
}
更改为.find
。 .forEach
会在找到所需元素时返回布尔值。 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)
答案 1 :(得分:0)
您没有在作为参数传递给find
的箭头函数中返回任何值。您需要在此处返回布尔值。
this.productArr.find((item: any) => {
if (item.name === product.name) {
item.count = product.count;
flag = true;
return true;
}
return false;
});
请注意,这也将停止在数组上进行进一步的迭代,这可能是您可能没有做的。如果您需要查找所有forEach
出现的名称与产品名称相同的地方,请使用item
。
更好的解决方案是使用some
或every
而不是find,这取决于您是否要将此操作应用于多个产品,因为使用find
意味着您正在寻找某些东西,而不是对商品进行更改。
// Will stop after the first time `true` is returned
this.productArr.some((item: any) => {
if (item.name === product.name) {
item.count = product.count;
flag = true;
return true;
}
});
答案 2 :(得分:0)
那:
addToCart(product: any): void {
// find will return your product, and it only need a boolean as condition for the arrow function
const product = this.productArr.find((item: any) => item.name === product.name);
// If you don't have some products or you don't find your product, you push it
if (!this.productArr.length || !product) {
this.productArr.push(product);
}
// if you find your product, you update your item.coun
if (product) {
item.count = product.count;
}
this.cartService.addToCart(this.productArr);
}
看看这个article,它实际上说明了如何查找/映射/ foreach运算符。