我正在尝试减少Magnolia JavaScript model中的FreeMarker列表。我希望所有以大写字母“ P”开头的项目。
[#assign list = ["Poker", "Pet", "Dog", "Cat", "Penguin", "Paddle", "punk"]]
我的函数应该返回:
["Poker", "Pet", "Penguin", "Paddle"]
我尝试使用Array.prototype.reduce()
。
Array.prototype.reduce()
var Model = function() {
this.reduceList = function(list) {
return list.reduce(function(reducedList, item) {
if (item.indexOf('P') !== -1) {
reducedList.push(item);
}
return reducedList;
}, []);
}
};
new Model();
但是,出现以下错误。
[#assign filteredList = model.reduceList(['Poker', 'Pet', 'Dog', 'Cat', 'Penguin', 'Paddle', 'punk'])]
注意: Magnolia JavaScript模型建立在jdk.nashorn.internal.runtime.ECMAException: TypeError: list.reduce is not a function
上。
当我返回列表类型时:
Nashorn
我得到一个对象:
this.reduceList = function(list) {
return typeof list;
}
当我以字符串形式返回列表时:
object
我得到一个清单:
this.reduceList = function(list) {
return list.toString();
};
[Poker, Pet, Dog, Cat, Penguin, Paddle, punk]
时为什么会得到object
,但是返回typeof
值时却出现列表?toString
在Magnolia JavaScript模型中不起作用?Array.prototype.reduce()
,如何减少我的清单?使用Array.prototype.reduce()
方法