如何在Javascript中迭代Java集合

时间:2013-01-16 13:07:42

标签: java javascript

我正在尝试使用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);

2 个答案:

答案 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);