SSJS从数组中删除项目

时间:2017-12-08 08:44:59

标签: arrays json xpages xpages-ssjs

在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()方法不起作用。我在xsnippet上读到这个方法在SSJS中不起作用,另一种方法是作为xsnippet发布,但这是针对包含字符串的数组

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

任何人都可以告诉我如何从数组中删除不是字符串的项目?

1 个答案:

答案 0 :(得分:3)

Array.splice 在SSJS中有效,但不是CSJS中可能习惯的“内联方式”:在CSJS中,修改是内联完成的(没有创建新数组)和删除的元素将被返回。在SSJS中,原始数组未被修改,返回值是除拼接元素之外的数组副本。

如果您将.as-console-wrapper { max-height: 100% !important; top: 0; }替换为jsonObjArr.splice(idx,1);,您的代码应该可以正常工作。