Im Folgenden ist der erste Weg, die Vanille JS kam mit Verstand:
var myArray = [undefined, true, false, true];
var result = myArray.map((v,i) => v ? i : -1).filter(v => v > -1);
console.log(result);
Oder wenn Sie nicht wollen, Pfeil Funktionen verwenden:
var result = myArray.map(function(v,i) { return v ? i : -1; })
.filter(function(v) { return v > -1; });
Das heißt, zunächst die oder zuordnen iginal-Array, um den Index der wahren Elemente und -1 für andere Elemente auszugeben, dann filtere dieses Ergebnis, um nur diejenigen zu behalten, die nicht -1 sind.
Beachten Sie, dass die Kartenfunktion (v,i) => v ? i : -1
auf truthy Elemente testet - wenn Sie nur Elemente benötigen, die die boolesche true
sind, dann verwenden Sie (v,i) => v===true ? i : -1
.
Ich denke, das Lodash Äquivalent davon sein würde wie folgt (edit: danke für deutlich verbesserte Syntax zerkms):
var myArray = [undefined, true, false, true];
var result = _(myArray).map((v,i) => v ? i : -1).filter(v => v > -1).value();
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.14.0/lodash.js"></script>
'[... myArray.entries()]. Filter (([, v]) => v) .map (([i]) => i);' – zerkms