【发布时间】:2020-06-01 18:36:39
【问题描述】:
我正在尝试使用 Array.prototype.filter() 过滤 Magnolia JavaScript model 中的 FreeMarker 列表。
列表
[#assign list = [1, 2, 3]]
型号
var Model = function() {
this.filterList = function(list) {
return list.filter(function(item) {
return item === 2
});
}
};
new Model();
用法
${model.filterList(list)}
但是,我收到以下错误。
Caused by: jdk.nashorn.internal.runtime.ECMAException: TypeError: list.filter is not a function
Nashorn 是使用 ECMAScript-262 5.1 实现的。
Nashorn JavaScript 引擎首先通过 JEP 174 并入 JDK 8,作为 Rhino 脚本引擎的替代品。发布时,它是 ECMAScript-262 5.1 标准的完整实现。 — JEP 335: Deprecate the Nashorn JavaScript Engine
为什么尽管 Nashorn 遵循 ECMAScript-262 5.1,但在使用 Array.prototype.filter() 时会出现错误?
【问题讨论】:
-
无论
list是什么,它都不能提供map、filter或reduce方法 -
FreeMarker 可能正在创建一个
ArrayList。 -
因为列表可能不是数组。
-
@Pointy 当我转储 (
${cmsfn.dump(list, 3, true)})list的值时,我得到一个 JavaSequence。现在,为什么我不能使用 map、filter 和 reduce 是有道理的。 -
@Pointy 感谢您的帮助。我回答了我自己的问题:stackoverflow.com/a/60269352/11809808。
标签: javascript freemarker ecmascript-5 nashorn magnolia