Type- / JavaScript - array.indexOf始终返回-1

时间:2017-03-07 21:33:09

标签: javascript arrays angular typescript

我使用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(不知怎的,我无法上传照片,所以这里是链接)

3 个答案:

答案 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);