我使用splice
函数从数组中删除元素,使用indexOf
函数来获取元素位置。
但indexOf
始终返回-1
,尽管数组中包含相同的元素。
mycode的(Angular2):
subToDelete : Subscription;
public unsubscribe(topic:string) {
this.subToDelete = new Subscription(topic);
console.log("DeleteIndex: ",this.subs.indexOf(this.subToDelete));
this.subs.splice(this.subs.indexOf(this.subToDelete),1);
console.log("SubTo Delete: ",this.subToDelete);
this.subs.forEach(element => {
console.log("Subscribed to: ",element);
});
}
这是控制台输出,您可以看到,应该删除的元素包含在数组中,但indexOf
仍会返回-1
。
http://imgur.com/a/HGz5c(不知怎的,我无法上传照片,所以这里是链接)
答案 0 :(得分:3)
你也可以使用需要les迭代的Array.prototype.find()而不是map
函数:
let index: number;
this.subs.find((item, i) => { if (item.topic === topic) index = i });
this.subs.splice(index, 1);
答案 1 :(得分:1)
您面临的问题是因为您尝试在对象数组中进行搜索。这与文字数组不同。
你可以做这样的事情
pos = this.subs.map(function(e) {
return e.topic;
})
.indexOf(this.subToDelete.topic);
this.subs.splice(pos,1);
请查看此question以获取有关该主题的更多信息。
答案 2 :(得分:0)
你也可以使用Array.prototype.findIndex,我认为这是最简单的解决方案:
let index = this.subs.findIndex((item) => item.topic === topic);
if (index > -1) this.subs.splice(index, 1);