Let's say I have an array with the following values -
var arr = [true, true, false, false, false, true, false];
I'm looking for logic which will give me the following output -
[0,1,5]
Let's say I have an array with the following values -
var arr = [true, true, false, false, false, true, false];
I'm looking for logic which will give me the following output -
[0,1,5]
You can use .reduce() to do this in one pass:
const arr = [true, true, false, false, false, true, false]
const indices = arr.reduce(
(out, bool, index) => bool ? out.concat(index) : out,
[]
)
console.log(indices)
You start by passing an empty array [] as the initialValue to .reduce() and use a ternary ? operator to determine whether to .concat() the index or not.
Alternatively, you can use the more recent .flatMap() method:
const arr = [true, true, false, false, false, true, false]
const indices = arr.flatMap((bool, index) => bool ? index : [])
console.log(indices)
If your browser does not yet support it, you'll get an Uncaught TypeError: arr.flatMap is not a function. In that case, you can use my polyfill definition from here.