如果JavaScript中的对象数组中有两个项具有相同的值,如何删除一个项?
我在vuejs中显示了一组卡片对象如果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, 交
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问题被标记为sodocument。createElement()
和innerHTML
都不好options@Phil使用Array.prototype.filter()的正确方法是什么
?首先感谢您回答我的问题。所以我试过这个,但现在它没有删除标签。你还有其他建议吗?此外,我还更新了这个问题,以便您能够更准确地理解。一个是卡组件,另一个是卡渲染的组件,卡的数据来自该组件的后端。数据通过道具传递到卡片组件。@WaleedAliKhan ok?第一个组件中的cardData
是否以某种方式与主卡数据分离?因此cardData
是一个道具,是对象的类型。因此,我所做的是在父组件中的cardsfrombend
上循环,并通过道具将对象发送到子(卡)组件。@WaleedAliKhan我不确定这一切与我的答案有什么关系