Функции Jint Array ECMA 5.1

Я пытаюсь использовать Jint (v2.10.4.0) для перевода одной произвольной структуры JSON в другую. Однако у меня возникли проблемы с использованием карты.

Согласно спецификации языка ECMA 5.1, карта должна существовать на Array.prototye. Однако, когда я пытаюсь использовать его, я получаю сообщение об ошибке: Jint.Runtime.JavaScriptException: 'У объекта нет метода' map ''

Я тестирую это как

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();

В идеале я также хотел бы использовать find, хотя это ECMA6. Есть ли что-то, что мне не хватает, чтобы использовать Array.Prototype.map или есть способ введения полизаполнений для Jint?

1 ответ

Решение

Ваш код добавляет строковое значение как xтак что Джинт не может найти map на экземпляре строки. Вы, вероятно, предположили, что SetValue Метод оценивал параметр как скрипт, но на самом деле он просто присваивает объект.NET переменной JavaScript.

Чтобы назначить массив, вам нужно либо передать массив C#, например: SetValue("x", new [] { 1, 2, 3, 4, 5 }) или запустить эквивалентный скрипт как Execute("var x = [1, 2, 3, 4, 5 ]"),

Другие вопросы по тегам