【问题标题】:SSJS remove item from an arraySSJS 从数组中删除项目
【发布时间】:2023-03-17 12:37:01
【问题描述】:

在 ssjs 中,我有一个包含 jsonobjects 的数组。此数组存储在范围变量中并显示在重复控件中:

<xp:repeat id="rptAssessors" value="#{sessionScope.tmpAssessors}" var="obj" indexVar="idx">

从重复控件中,我想添加从数组中删除单个项目的选项,例如通过每行按钮上的 onclick 事件:

<xp:eventHandler event="onclick" submit="true" refreshMode="partial" immediate="true" refreshId="dlgContent"> <xp:this.action> <xp:executeScript
 script="#{javascript:removeAssessor(idx);}"> </xp:executeScript> </xp:this.action></xp:eventHandler>   

我的 removeAssessor 函数如下所示:

function removeAssessor(idx){   

    var jsonObjArr = sessionScope.get("tmpAssessors");

    print("before elements " + jsonObjArr.length)
    print(idx + 1)
    jsonObjArr.splice(idx,1);
    print("after elements " + jsonObjArr.length)

    sessionScope.put("tmpAssessors",jsonObjArr);

}

我注意到 splice() 方法不起作用。我在 xsn-p 上读到,此方法在 SSJS 中不起作用,另一种方法被发布为 xsn-p,但这是用于包含字符串的数组

https://openntf.org/XSnippets.nsf/snippet.xsp?id=remove-an-entry-from-an-array-of-strings

谁能告诉我如何从数组中删除一个不是字符串的项目?

【问题讨论】:

标签: arrays json xpages xpages-ssjs


【解决方案1】:

Array.splice 确实在 SSJS 中工作,但不是以您可能习惯于 CSJS 的“内联方式”:在 CSJS 中,修改是内联完成的(不创建新数组)并且移除的元素被返回。在 SSJS 中,原始数组没有被修改,返回值是数组的副本,不包括拼接的元素。

如果您将jsonObjArr.splice(idx,1); 替换为jsonObjArr=jsonObjArr.splice(idx,1);,您的代码应该可以正常工作。

【讨论】:

  • 太棒了!现在我可以扔掉我添加的拼接功能了。谢谢老兄!
猜你喜欢
  • 2021-10-19
  • 2021-10-03
  • 2014-09-21
  • 2013-06-08
  • 2020-07-01
  • 2019-02-15
  • 2014-05-01
  • 2015-10-25
  • 2021-11-03
相关资源
最近更新 更多