JSFiddle - React, Tailwind, and code Playground

JavaScript

const isGt0 = n => n > 0;
console.log(findIndexes([0, 1, 0, 0, 7, -2, 8], isGt0));
console.log(findIndexesDeep([0,1,0,[1,0,0],[0,[1],1]], isGt0));

function findIndexes(input, fn) {
    if (!Array.isArray(input) || typeof fn !== 'function') return [];

    return input
        .map((e, i) => [e, i])
        .filter(tuple => fn(tuple[0]))
        .map(tuple => tuple[1]);
}

function findIndexesDeep(input, fn) {
    if (!Array.isArray(input) || typeof fn !== 'function') return [];

    const res = [];
    const tuples = input.map((e, i) => [e, i]);
    const filtered = tuples.filter(tuple => Array.isArray(tuple[0]) || fn(tuple[0]));
    
    filtered.forEach(tuple => {
        const [value, index] = tuple;

        if (Array.isArray(value)) {
            const children = findIndexesDeep(value, fn);
            children.forEach(child => {
                const childArray = (Array.isArray(child) ? child : [child]);
                res.push([index, ...childArray])
            });

        } else if (fn(value)) {
            res.push([index]);
        }
    });
    
    return res;
}