Code sollte lesbar sein, also sollte Prägnanz nicht bedeuten, dass Sie um jeden Preis knapp sind - dafür sollten Sie erneut auf https://codegolf.stackexchange.com/ posten - stattdessen würde ich empfehlen, eine zweite lokale Variable mit dem Namen index
zu verwenden, um die Lesbarkeit zu maximieren ( bei minimalen Laufzeitkosten stelle ich auch fest):
var index = someArray.indexOf( 3 );
var value = index == -1 ? 0 : index;
Aber wenn Sie diesen Ausdruck wirklich reduzieren möchten, weil Sie ein grausamer Sadist gegenüber Ihren Mitarbeitern oder Projektmitarbeitern sind, dann sind hier 4 Ansätze, die Sie verwenden können:
1: Temporäre Variable in einer var
Anweisung
Sie können die var
Fähigkeit der Anweisung verwenden, eine zweite temporäre Variable zu definieren (und zuzuweisen), index
wenn sie durch Kommas getrennt wird:
var index = someArray.indexOf(3), value = index !== -1 ? index: 0;
2: Selbstausführende anonyme Funktion
Eine weitere Option ist eine selbstausführende anonyme Funktion:
// Traditional syntax:
var value = function( x ) { return x !== -1 ? x : 0 }( someArray.indexOf(3) );
// ES6 syntax:
var value = ( x => x !== -1 ? x : 0 )( someArray.indexOf(3) );
3: Kommaoperator
Es gibt auch den berüchtigten "Komma-Operator", den JavaScript unterstützt und der auch in C und C ++ vorhanden ist.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
Sie können den Kommaoperator verwenden, wenn Sie mehrere Ausdrücke an einer Stelle einfügen möchten, für die ein einzelner Ausdruck erforderlich ist.
Sie können es verwenden, um Nebenwirkungen einzuführen, in diesem Fall indem Sie Folgendes neu zuweisen value
:
var value = ( value = someArray.indexOf(3), value !== -1 ? value : 0 );
Dies funktioniert, weil var value
zuerst interpretiert wird (da es sich um eine Anweisung handelt), dann die value
Zuordnung ganz links, ganz innen und dann die rechte Hand des Kommaoperators und dann der ternäre Operator - alles legales JavaScript.
4: Neuzuweisung in einem Unterausdruck
Der Kommentator @IllusiveBrian wies darauf hin, dass die Verwendung des Komma-Operators (im vorherigen Beispiel) nicht erforderlich ist, wenn die Zuweisung an value
als Unterausdruck in Klammern verwendet wird:
var value = ( ( value = someArray.indexOf(3) ) !== -1 ? value : 0 );
Beachten Sie, dass die Verwendung von Negativen in logischen Ausdrücken härter sein können für den Menschen zu folgen - so alle oben genannten Beispiele kann durch Änderung für das Lesen vereinfacht werden idx !== -1 ? x : y
zu idx == -1 ? y : x
:
var value = ( ( value = someArray.indexOf(3) ) == -1 ? 0 : value );
if
und nicht einif/else