我正在尝试使用Java程序中的Javascript编写脚本。我还没有找到一种在Javascript中迭代Java集合的方法。如果我为集合调用iterator()方法,我会得到方法名称而不是元素。
以下是示例代码:
function getValue(row, components) {
var apartment = components.get(0);
var rooms = apartment.getRooms();
for (var room in rooms.iterator()) {
println(room);
}
return rooms.toString();
}
apartment.getRooms()返回一组房间。当我研究这个函数返回的值时,我知道它的内容是正确的,但是打印的值是方法名称。
我从我的Java程序中调用Javascript,如下所示:
getInvocable().invokeFunction("getValue", row, components);
答案 0 :(得分:7)
如果我按如下方式进行迭代:
function getValue(row, components) {
var apartment = components.get(0);
var rooms = apartment.getRelated();
for (var iterator = rooms.iterator(); iterator.hasNext();) {
var room = iterator.next();
println(room);
}
return rooms.toString();
}
有效。
答案 1 :(得分:4)
要使用for in
,您必须先将其转换为to an array:
Collection<String> coll = Arrays.asList("foo", "bar", "baz");
String script = "var arr = coll.toArray();\n"
+ "for(var idx in arr) println(arr[idx]);\n";
ScriptEngine engine = new ScriptEngineManager()
.getEngineByName("ECMAScript");
engine.getContext().setAttribute("coll", coll, ScriptContext.ENGINE_SCOPE);
engine.eval(script);
否则,您将遍历对象属性。
如果您使用的是Rhino 1.7或更高版本,则可以使用其non-standard iterator support:
for (i in Iterator(coll)) print(i);