Функция Array.filter в серверном Javascript

Я хотел бы отфильтровать массив в моем XPage с Javascript на стороне сервера. К сожалению, я получаю следующую ошибку:

Ошибка вызова метода 'filter(Function)' для объекта типа 'Array [JavaScript Object]'

У меня есть массив строк, как ["elem1","elem2","elem3"]

Я называю функцию так:

list.filter(function(){

});

Есть ли причина, по которой эта ошибка происходит? Эта функция вообще существует в ssjs?

Этот вопрос не является дубликатом, поскольку неясно, что Xpages/Lotus Notes запускает Rhino в фоновом режиме.

2 ответа

Решение

Похоже, что любая серверная среда JavaScript, которую вы используете, не поддерживает функции ES5 (это функции из спецификации 5-го издания от декабря 2009 г.).

Вы можете использовать polyfill для этой и других вещей, которые были добавлены в Array, смотрите MDN, но будьте осторожны: если функции ES5 не поддерживаются, невозможно что-то добавить в Array.prototype не делая их перечисляемыми, имея в виду любой код (неправильно), используя for-in цикл через массивы будет затронут.

За XPages стоит Rhino. А в этой ТАКОЙ теме нет Array.filter() в Rhino? говорит, что это устарело.

Редактировать: нет, это не так. Несколько лет назад я где-то читал об этом. Теперь кажется, что это не так. Согласно комментарию Дэна Сиклза (цитируя Филиппа Рианда?) Здесь:

Он работает на сервере jvm и использует javascript в качестве языка приложения. По причинам лицензирования IBM написала свой собственный движок jvm javascript вместо использования Rhino. С отправкой Rhino в java 6 они должны быть в состоянии отправить его в Designer 8.5 (или более поздней версии). Проблемы с лицензированием могли быть связаны с такими расширениями, как @Formulas и объявления типов. Классы, модули / пространства имен и объявления типов идут в javascript 2, и даже Google помогает реализовать это в Rhino. Я не хотел бы видеть нестандартный движок javascript, лежащий в основе самой крутой технологии веб-разработки в Domino.

Говоря о Rhino, "самая важная новая функция, которая не столь определенно будет в 8.5, как XPages", использует Rhino и другие языки сценариев jvm на клиенте. Если это войдет в продукт, через два года большинство новых приложений Notes не будут написаны ни на Lotusscript, ни на Java. Я оставлю это на этом.

На самом деле, есть несколько тем, как использовать Rhino в XPages, поэтому с самой новой версией Rhino ваш код будет работать. В любом случае, мой совет - использовать вызовы Java.

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