2017-05-29 30 views
1

我正在尝试使用Jint(v2.10.4.0)将一个任意JSON结构转换为另一个。不过,我在使用地图时遇到了问题。Jint数组函数ECMA 5.1

根据ECMA 5.1语言规范,map应该存在Array.prototye上。然而,当我尝试使用它,我得到一个错误:Jint.Runtime.JavaScriptException:“对象有没有方法'地图”

我测试这个像

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引入polyfills?

回答

1

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

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

+0

谢谢。我终于搞清楚了! –