如何减少 Magnolia JavaScript 模型中的列表?
How do I reduce a list in a Magnolia JavaScript model?
我正在尝试减少 Magnolia JavaScript model 中的 FreeMarker 列表。我想要所有以大写 "P".
开头的项目
[#assign list = ["Poker", "Pet", "Dog", "Cat", "Penguin", "Paddle", "punk"]]
我的函数应该return:
["Poker", "Pet", "Penguin", "Paddle"]
尝试次数
我尝试使用 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'])]
但是,我收到以下错误。
jdk.nashorn.internal.runtime.ECMAException: TypeError: list.reduce is not a function
注意: Magnolia JavaScript 模型基于 Nashorn.
调试
当我return列表的类型时:
this.reduceList = function(list) {
return typeof list;
}
我得到一个对象:
object
当我return列表为字符串时:
this.reduceList = function(list) {
return list.toString();
};
我得到一个列表:
[Poker, Pet, Dog, Cat, Penguin, Paddle, punk]
如何减少 Magnolia JavaScript 模型中的列表?
使用filter()
方法。这是一个代码示例:
var Model = function() {
this.reduceList = function(list) {
return Java.from(list).filter(function(item) {
return item[0] === 'P'
});
}
};
JavaScript returns object
中的 typeof
运算符用于数组值 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof).
当您调用 toString() 时,您只是打印出您拥有的数组的值。
此外,Prasana Kannan 是正确的。这不是 reduce 的好用法。 Reduce 用于 return 一组值中的一个值 (https://engineering.khanacademy.org/posts/lets-reduce.htm). Using filter would be more elegant here (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter).
至于为什么 reduce 不被识别为函数,您可能需要查看您的 Nashorn 版本,看看它是否包含 reduce 的实现。
我正在尝试减少 Magnolia JavaScript model 中的 FreeMarker 列表。我想要所有以大写 "P".
开头的项目[#assign list = ["Poker", "Pet", "Dog", "Cat", "Penguin", "Paddle", "punk"]]
我的函数应该return:
["Poker", "Pet", "Penguin", "Paddle"]
尝试次数
我尝试使用 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'])]
但是,我收到以下错误。
jdk.nashorn.internal.runtime.ECMAException: TypeError: list.reduce is not a function
注意: Magnolia JavaScript 模型基于 Nashorn.
调试
当我return列表的类型时:
this.reduceList = function(list) {
return typeof list;
}
我得到一个对象:
object
当我return列表为字符串时:
this.reduceList = function(list) {
return list.toString();
};
我得到一个列表:
[Poker, Pet, Dog, Cat, Penguin, Paddle, punk]
如何减少 Magnolia JavaScript 模型中的列表?
使用filter()
方法。这是一个代码示例:
var Model = function() {
this.reduceList = function(list) {
return Java.from(list).filter(function(item) {
return item[0] === 'P'
});
}
};
JavaScript returns object
中的 typeof
运算符用于数组值 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof).
当您调用 toString() 时,您只是打印出您拥有的数组的值。
此外,Prasana Kannan 是正确的。这不是 reduce 的好用法。 Reduce 用于 return 一组值中的一个值 (https://engineering.khanacademy.org/posts/lets-reduce.htm). Using filter would be more elegant here (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter).
至于为什么 reduce 不被识别为函数,您可能需要查看您的 Nashorn 版本,看看它是否包含 reduce 的实现。