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); Ваш код должен работать нормально.

Другие вопросы по тегам