2017-08-19 1 views
0

Hier ist ein Beispielcode, der meine Situation ähnelt:Wie initialisiert man ein Javascript-Array mit seinen eigenen Elementen und Elementen eines anderen Arrays?

var customProcessor = function test1(arga, argb, argc, argd) { 
    console.log('customProcessor', 'arga', arga); 
    console.log('customProcessor', 'argb', argb); 
    console.log('customProcessor', 'argc', argc); 
    console.log('customProcessor', 'argd', argd); 
}; 

var utilityMethod = function test2(arga, argb, someFunc, cbArgs) { 
    console.log('utilityMethod', 'arga', arga); 
    console.log('utilityMethod', 'argb', argb); 
    cbArgs.unshift(argb); 
    cbArgs.unshift(arga); 
    someFunc.apply(this, cbArgs); // INTENT: someFunc(arga, argb, argc, argd); 
}; 

utilityMethod('argA', 'argB', customProcessor, ['argC','argD']); 

Der obige Code verwaltet alle 4 erforderlichen Argumente meiner customProcessor Methode zu übergeben, aber die folgenden Zeilen sind nicht die lesbar in Bezug auf die Absicht:

cbArgs.unshift(argb); 
    cbArgs.unshift(arga); 
    someFunc.apply(this, cbArgs); // INTENT: someFunc(arga, argb, argc, argd); 

Gibt es eine Möglichkeit, sie in einer selbsterklärenden Weise zu schreiben ... mit einer JS-Syntax, von der ich vielleicht nichts weiß?

Hier ist, was ich mir vor, wäre besser lesbar:

// not real code 
    someFunc.apply(this, [arga, argb, cbArgs]); 

aber ich muss wissen, ob es eine realistische JS Syntax ist dies zu erreichen?

+1

'[arga, ARGB, ... cbArgs]' – ASDFGerte

+0

@ASDFGerte - danke! Würdest du mir antworten, damit ich es als die richtige Antwort markieren kann? – pulkitsinghal

Antwort

2

Verwenden Sie die spread syntax:

[arga, argb, ...cbArgs]

Beachten Sie, dass dies auch direkt auf den Funktionsaufruf funktioniert, ersetzen apply (wenn Sie keine explizite this benötigen), z.B. someFunc(arga, argb, ...cbArgs)

+0

ja du hast wieder Recht! beide funktionieren: 'someFunc.apply (dies, [arga, argb, ... cbArgs]);' oder 'someFunc (arga, argb, ... cbArgs);' – pulkitsinghal

+0

@pulkitsinghal stellen Sie sicher, beide Registerkarten im Browser zu überprüfen Support-Abschnitt, da es nicht in IE und einigen älteren Browsern unterstützt https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator#Browser_compatibility – Slai

1

function customProcessor(a, b, c, d) { 
 
    console.log('customProcessor:', a, b, c, d); 
 
}; 
 

 
function utilityMethod(arga, argb, someFunc, cbArgs) { 
 
    console.log('utilityMethod :', arga, argb); 
 
    someFunc(arga, argb, cbArgs[0], cbArgs[1]); 
 
    // or 
 
    someFunc.apply(this, [arga, argb].concat(cbArgs)); 
 
}; 
 

 
utilityMethod('argA', 'argB', customProcessor, ['argC','argD']);

Verwandte Themen