2

我正在尝试使用 Jint (v2.10.4.0) 将一种任意 JSON 结构转换为另一种。但是,我在使用map时遇到问题。

根据 ECMA 5.1 语言规范,map应该存在于 Array.prototye 上。但是,当我尝试使用它时,出现错误:Jint.Runtime.JavaScriptException: 'Object has no method '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 引入 polyfill?

4

1 回答 1

3

您的代码将字符串值添加为,因此 Jint在字符串实例上x找不到。map您可能认为该SetValue方法将参数评估为脚本,但实际上它只是将 .NET 对象分配给 JavaScript 变量。

要分配一个数组,您要么需要传递一个 C# 数组,SetValue("x", new [] { 1, 2, 3, 4, 5 })要么运行等效的脚本,如Execute("var x = [1, 2, 3, 4, 5 ]").

于 2017-05-29T16:48:51.073 回答