假设我有一个具有以下值的数组-
var arr = [true, true, false, false, false, true, false];
我正在寻找可以提供以下输出的逻辑-
[0,1,5]
答案 0 :(得分:3)
您可以使用.reduce()
一次完成此操作:
const arr = [true, true, false, false, false, true, false]
const indices = arr.reduce(
(out, bool, index) => bool ? out.concat(index) : out,
[]
)
console.log(indices)
您首先将一个空数组[]
作为initialValue
传递到.reduce()
,然后使用ternary ?
operator来确定是否.concat()
{{1} }。
答案 1 :(得分:1)
您可以映射索引或伪造值-1
,然后过滤所有非-1
的索引。
var array = [true, true, false, false, false, true, false],
result = array
.map((b, i) => b ? i : -1)
.filter(i => i !== -1);
console.log(result);
答案 2 :(得分:0)
您可以简单地使用循环并在您的true
条件下检查布尔值if
:
var arr = [true, true, false, false, false, true, false];
var indexArray = [];
arr.forEach((val, index) => {
if(val){
indexArray.push(index);
}
});
console.log(indexArray);
答案 3 :(得分:0)
尝试
index
答案 4 :(得分:0)
基于逻辑本身而非JS范式的不同解决方案
ng update @angular/core
答案 5 :(得分:0)
一个可能更优雅的解决方案是:
[...arr.keys()].filter(i => arr[i])