Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法阻止将副本添加到阵列中_Javascript_Arrays - Fatal编程技术网

Javascript 无法阻止将副本添加到阵列中

Javascript 无法阻止将副本添加到阵列中,javascript,arrays,Javascript,Arrays,我在我的小型电子商务应用程序中添加了一个语音命令提示符。当我命令ai向列表中添加产品时,它会添加产品,而当我再次尝试添加产品时,它不会。但是,当我尝试添加其他项时,命令提示符会拒绝它。我希望它适用于所有项目。我试图查找不同的选项,包括indexOf,但该方法也不起作用 功能语音命令(数据){ const products=新产品(); 设alanBtnInstance=alanBtn({ 顶部:“15px”, 左:“15px”, onCommand:函数(commandData){ 如果(c

我在我的小型电子商务应用程序中添加了一个语音命令提示符。当我命令ai向列表中添加产品时,它会添加产品,而当我再次尝试添加产品时,它不会。但是,当我尝试添加其他项时,命令提示符会拒绝它。我希望它适用于所有项目。我试图查找不同的选项,包括indexOf,但该方法也不起作用


功能语音命令(数据){
const products=新产品();
设alanBtnInstance=alanBtn({
顶部:“15px”,
左:“15px”,
onCommand:函数(commandData){
如果(commandData.command==“opencart”){
products.openCart();
}
else if(commandData.command==“closecart”){
products.closeCart();
}
else if(commandData.command==“addItem”){
//获取购物车项目以与commandData.name进行比较
常量cartItem=数据
cartItem.forEach(项目=>{
退货项目。金额=1
});
const item=cartime.map(item=>item)
.find(item=>item.title.toLowerCase()==commandData.name.toLowerCase());
购物车=[…购物车,商品]
函数hasDuplicates(arr){
返回新集合(arr).size!==arr.length;
}
如果(有重复项(购物车)){
alanBtnInstance.playText(`${item.title}已在购物车`)中;
返回
}
否则{
常量按钮=[…document.querySelectorAll('.cart btn')]
buttonsDOM=按钮;
按钮。forEach(按钮=>{
设id=button.dataset.id;
让einvot=cart.find(item=>item.id==Number(id));
如果(化身){
button.innerText=“在购物车中”;
button.disabled=true;
}
});
产品。addCartItem(项目);
产品.设置CARTVALUES(cart);
products.openCart()
返回
}
}
},
rootEl:document.getElementById(“alan btn”),
});

}
我将代码简化了一点,以显示基本原理(我希望我没有弄错逻辑)

let cart=[];
常量addItem=(数据,命令数据)=>{
常量项=数据
.find(item=>item.title.toLowerCase()==
commandData.name.toLowerCase());
const dup=购物车
.find(item=>item.title.toLowerCase()===
commandData.name.toLowerCase());
如果(dup){
//console.log(`${dup.title}已在购物车`
dup.amount+=1;//只需更改金额
item.amount-=1;//计算存储中的剩余
}否则{
购物车=[…购物车,{…商品,金额:1}]//插入新的
item.amount-=1;//计算存储中的剩余
}
} 
//大量储存
常数数据=[
{id:'0',金额:'100',标题:'a'},
{id:'0',金额:'100',标题:'b'}
]
console.log('Cart before:')
console.log(JSON.stringify(cart))
console.log('storebefore:')
log(JSON.stringify(数据))
//测试操作:
附加项(数据,{name:'b'})
附加项(数据,{name:'b'})
addItem(数据,{name:'a'})
console.log('Cart after:')
console.log(JSON.stringify(cart))
console.log('Store after:')

console.log(JSON.stringify(data))
不清楚您称之为什么
hasDuplcates
,但它有可能是对象的集合,在本例中,当JavaScript使用引用比较来实现相等时,您希望进行值比较-。请添加足够的代码,以便我们可以单击“运行代码片段”,看看您在说什么(a)@takendarkk我已经添加了整个片段,应该可以用了now@takendark我想,因为这段代码属于一个类。嗨,丹尼尔,谢谢你的回答。你是对的,我不想在字符串中添加重复的内容,但是这段代码不起作用。谢谢你的回答。嗨@Alanaj,你想不想每个项目只添加一个?是的,这是正确的。我的代码几乎已经有了它。它阻止了第一个项目被复制,但当我去添加另一个项目时,它会说该项目已经在购物车中。我怀疑函数hasdeplicate只是返回一个对象,因为那里已经有一个项目,代码假定它是重复的。我不知道如何修复它。我在下面现在就站起来,但代码中有重复项返回布尔值我知道。我对set方法不熟悉,我正在尝试进行研究,但什么都没有出现。我不明白为什么当商品不在购物车中时它会返回布尔值。我尝试过循环,但没有成功。