Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.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_Html_Vue.js_Ecmascript 6 - Fatal编程技术网

如果JavaScript中的对象数组中有两个项具有相同的值,如何删除一个项?

如果JavaScript中的对象数组中有两个项具有相同的值,如何删除一个项?,javascript,html,vue.js,ecmascript-6,Javascript,Html,Vue.js,Ecmascript 6,我在vuejs中显示了一组卡片对象 cardsfrombend:[ { id:1, tickerName:“IBM”, tickerFullName:“国际商业机器”, 基准:121.3, 总回报率:16.9, 交易回报:-14.0, 夏佩拉蒂奥:0.0006, 胜率:28.2, 日期:周一至十月三十一日, 标签:['IBM'], }, { id:2, tickerName:“HP”, tickerFullName:“Hawlett-Packard”, 基准:91.3, 总回报率:10.9, 交

我在vuejs中显示了一组卡片对象

cardsfrombend:[
{
id:1,
tickerName:“IBM”,
tickerFullName:“国际商业机器”,
基准:121.3,
总回报率:16.9,
交易回报:-14.0,
夏佩拉蒂奥:0.0006,
胜率:28.2,
日期:周一至十月三十一日,
标签:['IBM'],
},
{
id:2,
tickerName:“HP”,
tickerFullName:“Hawlett-Packard”,
基准:91.3,
总回报率:10.9,
交易回报率:23.2,
夏佩拉蒂奥:0.0006,
胜率:68.2,
日期:10月30日星期日,
标签:['IBM'],
},
{
id:3,
tickerName:'应用',
tickerFullName:'苹果',
基准:201.3,
总回报率:110.9,
贸易申报表:173.2,
夏佩拉蒂奥:0.0006,
胜率:168.2,
日期:10月29日星期六,
标签:[],
},
],
我在左下角显示了保存在
tags
数组中的标记

标签上还有一个删除按钮。当卡片中有不同的标签时,只删除单击的标签。但我的问题是,如果有一个标签在两张卡中具有相同的值,单击以删除,则该标签将从两张卡中删除

下面是标签的html

<vs-chip
  v-for="tag in cardData.tags"
  :key="tag.id"
  @click="remove(tag)"
  closable
  close-icon="delete"
  >
  {{ tag }}
</vs-chip>
下面是这个remove方法的侦听器

//删除已单击卡上的标记
eventBus.$on('delTag',(tag)=>{
让cardTags=this.cardDetails.filter((卡片)=>{
if(卡片标签包括(标签)){
卡标签拼接(卡标签索引,1);
}
});
});
有没有一种方法可以告诉我们,只有删除卡上的标签点击删除


谢谢。

您需要将所单击卡的id传递给您的函数,然后执行类似操作,并且在您的情况下不需要使用过滤器

let cardTags = getCardTags(theOnClickedCardId)

function getCardTags(theOnClickedCardId){
return this.cardDetails.map((card) => {
   if (card.tags.includes(tag) && card.id == theOnClickedCardId) {
     card.tags.splice(card.tags.indexOf(tag), 1);
   }
})};

将卡和标记传递给
remove()
方法和事件


{{tag}}
移除(卡、标签){
eventBus.$emit('delTag',{card,tag})
},
eventBus.$on('delTag',({card,tag})=>{
card.tags=card.tags.filter(cardTag=>cardTag!==tag)
//或
卡.标签.拼接(卡.标签.索引(标签),1)
})

如果您正在单击某张卡的标签,您能否不更改该卡的标签,例如
card.tags=card.tags.filter(tag=>tag!==tagToRemove)
?如果没有看到您的模板或方法,很难回答这个问题。请使用一个可以
中断的循环。这可能是一个更大问题的简单解决方案。如果您的卡是动态创建的,那么为什么您当时不将事件添加到特定元素中?也许您使用了
.innerHTML
来创建元素。我建议改为
document.createElement
。分配给变量后,只需分配事件。此外,您肯定没有使用
Array.prototype.filter()
correctly@StackSlave问题被标记为so
document。createElement()
innerHTML
都不好options@Phil使用
Array.prototype.filter()的正确方法是什么
?首先感谢您回答我的问题。所以我试过这个,但现在它没有删除标签。你还有其他建议吗?此外,我还更新了这个问题,以便您能够更准确地理解。一个是卡组件,另一个是卡渲染的组件,卡的数据来自该组件的后端。数据通过道具传递到卡片组件。@WaleedAliKhan ok?第一个组件中的
cardData
是否以某种方式与主卡数据分离?因此
cardData
是一个道具,是对象的类型。因此,我所做的是在父组件中的
cardsfrombend
上循环,并通过道具将对象发送到子(卡)组件。@WaleedAliKhan我不确定这一切与我的答案有什么关系