使用findIndex,但开始在特定位置查找

时间:2018-07-31 10:51:43

标签: javascript typescript

我有以下代码摘录:

private getNextFakeLinePosition(startPosition: number): number{
        return this.models.findIndex(m => m.fakeObject);
}

此函数向我返回第一个元素的索引,该元素的属性为fakeObject,其值为真。

我想要的是这样的东西,但我不想查找数组中的所有项目,而是要从特定位置(startPosition)开始。

注意:这是打字稿,但是解决方案可能在javascript vanilla中。

谢谢。

3 个答案:

答案 0 :(得分:1)

findIndex()的回调将接收当前索引,因此您可以通过以下方式添加条件:

private getNextFakeLinePosition(startPosition: number): number{
    return this.models.findIndex((m, i) => i >= startPosition && m.fakeObject);
}

这不是最有效的解决方案,但是只要您的数组不是太大,就应该可以。

答案 1 :(得分:1)

您可以尝试使用slice

private getNextFakeLinePosition(startPosition: number): number {
  const index = this.models.slice(startPosition).findIndex(m => m.fakeObject);
  return index === -1 ? -1 : index + startPosition;
}

它将对您的输入数组进行切片,并在子数组上找到索引。然后-最后,只需添加startPosition即可获得真实索引。

答案 2 :(得分:0)

一个模糊但可行的解决方案是跳过索引,直到我们到达起始索引:

let startIndex = 4;
array.findIndex((item, index) => index >= 4 && item.fakeObject);