javascript - JS indexOf 对象数组和 splice() 未删除正确的对象
问题描述
我有一个像这样的对象数组:
"followers": [
{
"id": "1be87842-2f7f-4e3b-8fde-9a998feb3a01",
"bug_id": "4ae2707b-07ef-4e07-95da-77855c67fece",
"user_id": "e9e81aa2-4994-483d-a3a7-3b88491f1fda",
"username": "texample1",
"name": "Test Example1",
"created_at": "2018-11-27 21:01:42",
"updated_at": "2018-11-27 21:01:42",
"deleted_at": null
},
{
"id": "7bd1fa5f-4109-4beb-b53a-fb03a1d23536",
"bug_id": "4ae2707b-07ef-4e07-95da-77855c67fece",
"user_id": "e9e81aa2-4994-483d-a3a7-3b88491f1fda",
"username": "texample1",
"name": "Test Example2",
"created_at": "2018-11-27 21:01:48",
"updated_at": "2018-11-27 21:01:48",
"deleted_at": null
}
]
我正在尝试使用我的 vuex 商店中的以下代码通过它的索引删除一个对象:
let followersArray = state.bugs.find(b => b.id === follower.bug_id).followers
let index = followersArray.indexOf(follower)
followersArray.splice(index, 1)
我将整个追随者对象传递给这个突变,然后在错误对象上找到追随者数组,找到索引并尝试从完整的错误对象的追随者对象数组中拼接它。此代码从错误中删除了另一个追随者。索引记录为 -1,它应该是 1。有人看到我在这里缺少什么吗?如果我能得到正确的索引,我也会if(index !== -1))
在那里添加一个。
解决方案
当您运行此代码并返回-1
:
let index = followersArray.indexOf(follower);
这意味着该follower
对象不包含在followersArray
. followersArray
可能包含对象的副本——follower
而不是对同一对象的引用。
即使对象与 中的follower
对象具有相同的属性和属性值followersArray[1]
,indexOf
也会返回 a -1
,除非它们是完全相同的对象。
现在,如果您只想在数组中找到一个具有匹配属性值(例如id
)的对象,那么您可以使用map
orfindIndex
来执行此操作:
let index = followersArray.map(i => i.id).indexOf(follower.id);
推荐阅读
- angular - 无法将来自 Web api 的数据绑定到 Angular 中的选择选项
- python - 类中有两个版本的 self 对象,这怎么可能?
- javascript - firebase 查询无法获取数据
- javascript - TypeError:无法读取 Angularjs 中未定义的属性“0”
- javascript - npm 的 `debug` 包:显示来自 2 个包的日志
- java - 使用 Bing 和 Java 进行地理定位
- mysql - JSON 等效于 INSERT...ON DUPLICATE KEY UPDATE,并增加现有值的当前值
- mysql - 优化“OR”运算符以绕过 SQL 异常“列表中的最大表达式数为 1000”
- angular - 如何在 Angular Jamsine 中使用 finalize 关键字编写订阅方法的代码覆盖率?
- batch-file - 批处理脚本在计划时未获取值