使用过滤器获取数组中的项目索引Angular Javascript

时间:2017-07-21 11:26:14

标签: javascript arrays angular angularjs-filter

我在书中有一系列页面。我想找到我用过滤器查找的页面的索引。我正在把它培养成一个有效的功能,但我想我不能将indexOf或findIndex或类似的东西与过滤器结合起来?

要获取特定页面,我使用以下代码:

  getPage(pageNumber: number) {
    return this.pages.filter(page => page.pageNumber == pageNumber)[0];
  }

然后,要删除页面,我使用以下内容:

  deletePage() {
    let deletedPageLocation = this.findPageIndex();
    this.pages.splice(deletedPageLocation, 1);
    this.pagesChanged.next(this.pages.slice());
  }

  findPageIndex() {
    for(var i=0; i < this.pages.length; i++) {
      if (this.pages[i].pageNumber == this.currentPage) {
        return i;
      }
    }

我想简化为:

let deletedPageLocation = this.pages.indexOf(this.pages.filter(page => page.pageNumber == pageNumber)[0]);

但我无法找到让它返回值的方法。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

var found = $filter('filter')($scope.pages, { pageNumberinPages: pagenumberSearching },true);

它将返回与搜索匹配的对象数组。

我希望这会有所帮助。

答案 1 :(得分:0)

您也可以使用findindexOf来完成此操作。我发现它比使用过滤器容易得多。以下是您的问题的代码示例:

deletePage(item){
    let deleteItem = this.pages.find(this.findIndexToUpdate, item.pageId);   
    let index = this.pages.indexOf(deleteItem);

    if(index > -1){
      this.pages.splice(index, 1);
    }


  }

  findIndexToUpdate(item) {
       console.log("this: " + this)
        return item.pageId === this;
  }

Plunker demo