我有以下代码摘录:
private getNextFakeLinePosition(startPosition: number): number{
return this.models.findIndex(m => m.fakeObject);
}
此函数返回具有真实值的属性
fakeObject
的第一个元素的索引。
我想要的是这样的东西,但我不想寻找数组的所有项目,而是想从特定位置开始(
startPosition
)。
注意:这是打字稿,但解决方案可以是 javascript vanilla。
对
findIndex()
的回调接收当前索引,因此您可以这样添加条件:
private getNextFakeLinePosition(startPosition: number): number {
return this.models.findIndex((m, i) => i >= startPosition && m.fakeObject);
}
不是最有效的解决方案,但只要你的数组不是太大就应该没问题。
你可以尝试使用
slice
:
private getNextFakeLinePosition(startPosition: number): number {
const index = this.models.slice(startPosition).findIndex(m => m.fakeObject);
return index === -1 ? -1 : index + startPosition;
}
它将对您的输入数组进行切片并查找子数组上的索引。然后 - 最后,只需添加
startPosition
即可获得真正的索引。
在这种情况下,我可能会使用 for 循环。它不会增加切片数组的开销,并避免不必要的索引检查。
const findStartFromPos = <T>(predicate: (e: T) => boolean, array: T[], startFrom: number): number => {
for (let i = startFrom; i < array.length; i++) {
if (predicate(array[i])) {
return i;
}
}
return -1;
};
一个模糊但可行的解决方案是跳过索引,直到到达起始索引:
let startIndex = 4;
array.findIndex((item, index) => index >= startIndex && item.fakeObject);