如何减少Magnolia JavaScript模型中的列表?

问题描述 投票:0回答:1

我正在尝试减少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(),如何减少我的清单?
javascript nashorn magnolia
1个回答
0
投票

使用Array.prototype.reduce()方法

© www.soinside.com 2019 - 2024. All rights reserved.