gpt4 book ai didi

java - 如何从 java 8 中的 js 函数获取数组输出?

转载 作者:行者123 更新时间:2023-11-29 10:01:28 24 4
gpt4 key购买 nike

我在文件 test.js 中有以下方法:

function avg(input, period) {
var output = [];
if (input === undefined) {
return output;
}
var i,j=0;
for (i = 0; i < input.length- period; i++) {
var sum =0;
for (j = 0; j < period; j++) {
//print (i+j)
sum =sum + input[i+j];
}
//print (sum + " -- " + sum/period)
output[i]=sum/period;
}

return output;
}

我想将一个数组从 java 传递给这个函数,并在 java 中获取 js 输出数组。我使用了以下 java 代码:

double[] srcC = new double[] { 1.141, 1.12, 1.331, 1.44, 1.751, 1.66, 1.971, 1.88, 1.191, 1.101 };

try {
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("nashorn");

String location = "test.js";
engine.eval("load(\"" + location + "\");");
Invocable invocable = (Invocable) engine;
// double[] a = (double[]) invocable.invokeFunction("avg", srcC, 2);

System.out.println("obj " + invocable.invokeFunction("avg", srcC, 2));
} catch (Exception ex) {
LOGGER.error(ex.getLocalizedMessage());
}

我能够看到 avg js 函数的输出,但我不知道如何从 java 中的 js avg 函数获取 js 输出数组

感谢任何支持。

最好的问候,奥勒良

最佳答案

Invocable.invokeFunction 的返回类型是实现定义的。 Nashorn 脚本引擎返回一个实现了 jdk.nashorn.api.scripting.JSObject 的对象实例。

这个接口(interface)有一个方法Collection<Object> values() , 因此唯一需要的更改是转换 invokeFunction 的结果然后提取值的集合:

 JSObject obj = (JSObject)invocable.invokeFunction("avg", srcC, 2);
Collection result = obj.values();
for (Object o : result) {
System.out.println(o);
}

输出:

1.1305
1.2255
1.3855
1.5955
1.7054999999999998
1.8155000000000001
1.9255
1.5354999999999999

关于java - 如何从 java 8 中的 js 函数获取数组输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25640080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com