vue.js - 通过 id 从数组中删除一个项目
问题描述
data: function(){
return {
items: [
{ id: '1', name: 'Item 1', bool: false},
{ id: '2', name: 'Item 2', bool: false},
{ id: '3', name: 'Item 3', bool: false},
{ id: '4', name: 'Item 4', bool: false}
],
checkedItems: [],
};
},
methods:
{
select: function(event, index) {
if (!this.items[index].bool) {
this.checkedItems.splice(index, 1);
} else {
this.checkedItems.push(this.items[index]);
}
}
}
当我单击div
它时,它会将项目数据复制到checkedItems
并设置bool
为true
.
是否可以定位项目 ID 并从中删除该特定 ID,checkedItems
因为当前拼接正在根据索引删除错误的项目。
解决方案
为什么不使用对象而不是数组,如下所示:
data: function(){
return {
items: [
{ id: '1', name: 'Item 1', bool: false},
{ id: '2', name: 'Item 2', bool: false},
{ id: '3', name: 'Item 3', bool: false},
{ id: '4', name: 'Item 4', bool: false}
],
checkedItemsObj: {},
};
},
methods:
{
select: function(event, index) {
let item = this.items[index];
if (!item.bool) {
this.checkedItemsObj[item.id] = item
} else {
delete this.checkedItemsObj[item.id]
}
},
getCheckedItems: () => Object.values(data().checkedItemsObj)
}
现在要随时获取检查项目的数组,您可以调用methods.getCheckedItems()
推荐阅读
- c# - TransactionScope - 事务性 WCF 和并行/多线程
- android - 如何为华为 P30 Pro 开发自己的应用程序?
- c++ - Node.JS Addon 中的结果与 Visual Studio 不同
- java - 临时 Diffie-Hellman Java 密钥交换
- sql - Presto:将 vachar 转换为日期时间 2019-03-01 08:13:50,704
- javascript - 在reactjs中制作交叉(删除线)
- java - 如何找到观察 LiveData 的位置
- angular - c#编译器版本不兼容
- html - 如何定位第一个
,但不是第一个
按预期选择表格“tabid”的第一行。然而,第二个表的第一行也被选中,这是我不想要的。