I need to get errorIdx = 3
, but I get 0. How can I loop through array from its end?
const scrollPosition = 5007
const errorsHeight = [947, 2498, 3495, 4805, 5755]
errorIdx = errorsHeight.findIndex((itemHeight: number) => itemHeight < scrollPosition)
console.log(errorIdx) // 0
An alternative implementation of findLastIndex
where the callback function is aware of a thisArg
context/target and also will be invoked with its three parameters which are [element, index, array]
; thus following the standard of findIndex
...
function findLastIndex(arr, test, target) {
if (!arr && ((arr ?? true) === true)) {
throw new TypeError('findLastIndex called on null or undefined');
};
if (typeof test !== 'function') {
throw new TypeError(`${ test } is not a function`);
};
if (!Array.isArray(arr)) {
arr = Array.from(arr);
}
target = target ?? null;
let isContinue = true;
let idx = arr.length;
// assures -1 as return value for nothing found.
while ((idx >= 0) && isContinue) {
// be aware of sparse array slots ... and ...
// be a guard for the negative index default.
if (arr.hasOwnProperty(--idx)) {
isContinue = !test.call(target, arr[idx], idx, arr);
}
}
return idx;
}
const errorsHeight = [947, 2498, 3495, 4805, 5755];
const scrollPosition = 5007;
console.log(
findLastIndex(errorsHeight, (height/*, idx, arr*/) =>
height < scrollPosition
)
);
console.log(
findLastIndex(errorsHeight, height => height < 5)
);
.as-console-wrapper { min-height: 100%!important; top: 0; }