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 indexzu 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 varAnweisung
Sie können die varFähigkeit der Anweisung verwenden, eine zweite temporäre Variable zu definieren (und zuzuweisen), indexwenn 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 valuezuerst interpretiert wird (da es sich um eine Anweisung handelt), dann die valueZuordnung 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 valueals 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 : yzu idx == -1 ? y : x:
var value = ( ( value = someArray.indexOf(3) ) == -1 ? 0 : value );
ifund nicht einif/else