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;
}