2017-05-29 3 views
1

Ich versuche, Jint (v2.10.4.0) zu verwenden, um eine beliebige JSON-Struktur in eine andere zu übersetzen. Allerdings habe ich Probleme mit der Verwendung Karte.Jint Array-Funktionen ECMA 5.1

Gemäß der Sprachspezifikation ECMA 5.1 sollte map auf Array.prototye existieren. Allerdings, wenn ich es zu benutzen versuchen, erhalte ich eine Fehlermeldung: Jint.Runtime.JavaScriptException: Karte ‚‚

‘Objekt keine Methode hat‘ dies wie teste ich

Engine engine = new Engine(); 
var doubles = engine.SetValue("x", "[ 1, 2, 3, 4, 5 ]") 
    .Execute("x.map(function(a){ return a + a; })") 
    .GetCompletionValue() 
    .ToObject(); 
Console.WriteLine(doubles); 
Console.ReadKey(); 

Idealerweise Ich würde auch gerne finden, obwohl dies ECMA6 ist. Gibt es etwas, das mir fehlt, um Array.Prototype.map zu verwenden oder gibt es eine Möglichkeit, Polyfills für Jint einzuführen?

Antwort

1

Ihr Code fügt einen Zeichenfolgenwert wie x hinzu, sodass Jint in der Zeichenfolgeninstanz map nicht finden kann. Sie haben wahrscheinlich angenommen, dass die Methode SetValue den Parameter als Skript auswertet, aber in Wirklichkeit nur ein .NET-Objekt einer JavaScript-Variablen zuweist.

Um ein Array zuzuweisen, müssen Sie entweder ein C# -Array wie SetValue("x", new [] { 1, 2, 3, 4, 5 }) übergeben oder das entsprechende Skript wie Execute("var x = [1, 2, 3, 4, 5 ]") ausführen.

+0

Danke. Ich habe es schließlich herausgefunden! –