我正在尝试使用Jint(v2.10.4.0)将一个任意JSON结构转换为另一个。但是,我在使用地图时遇到了问题。
根据ECMA 5.1语言规范,Array.prototye上应该存在map。但是,当我尝试使用它时,我收到一个错误: 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引入polyfill?
答案 0 :(得分:2)
您的代码正在将字符串值添加为x
,因此Jint无法在字符串实例上找到map
。您可能认为SetValue
方法正在将参数作为脚本进行评估,但实际上只是将.NET对象分配给JavaScript变量。
要分配数组,您需要传递像SetValue("x", new [] { 1, 2, 3, 4, 5 })
这样的C#数组,或运行像Execute("var x = [1, 2, 3, 4, 5 ]")
这样的等效脚本。