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 ответ
Array.splice работает в SSJS, но не "встроенным способом", к которому вы могли бы привыкнуть из CSJS: В CSJS модификация выполняется встроенным образом (новый массив не создается), а удаленные элементы возвращаются. В SSJS исходный массив не изменяется, а возвращаемое значение является копией массива, исключая склеенные элементы.
Если вы замените jsonObjArr.splice(idx,1);
с jsonObjArr=jsonObjArr.splice(idx,1);
Ваш код должен работать нормально.