2016-11-04 1 views
0

Ich möchte ein Array in meiner XPage mit serverseitigem Javascript filtern. Leider bekomme ich folgende Fehlermeldung:Array.filter Funktion in Server-Seite Javascript

Error calling method 'filter(Function)' on an object of type 'Array [JavaScript Object]'

Ich habe ein Array von Strings wie ["elem1","elem2","elem3"]

nenne ich die Funktion wie folgt aus:

list.filter(function(){ 

}); 

Gibt es einen Grund, warum dieser Fehler passiert? Gibt es diese Funktion auch in ssjs?

Diese Frage ist nicht doppelt, da nicht klar ist, dass Rhino im Hintergrund von Xpages/Lotus Notes ausgeführt wird.

+1

https://gist.github.com/katio/08bf3f5e058b950cd957 – mplungjan

Antwort

1

Es klingt wie jede server-seitige JavaScript-Umgebung, die Sie verwenden, unterstützt keine ES5-Funktionen (das sind Funktionen aus der 5. Edition Spezifikation von Dezember 2009).

Sie eine polyfill für diese und andere Dinge verwenden können, die zu Array hinzugefügt wurden, sehen MDN, aber Vorsicht: Wenn ES5 Funktionen nicht unterstützt werden, ist es unmöglich, die Dinge zu Array.prototype hinzuzufügen, ohne sie enumerable zu machen, beliebigen Code Bedeutung (mis) mit for-in zu loop through arrays wird betroffen sein.

+0

Akzeptiert, wie die Polyfill den Trick für mich getan hat. Legen Sie es einfach in eine SSJS-Skriptbibliothek und fügen Sie es in Ihre Seite ein. Trotzdem vielen Dank für all die anderen Kommentare und Ratschläge! – MeMeMax

0

Es gibt Rhino hinter XPages. Und dieses SO Thema No Array.filter() in Rhino? sagt, es ist veraltet.

Bearbeiten: Nein, ist es nicht. Vor Jahren habe ich irgendwo darüber gelesen. Jetzt scheint es nicht wahr zu sein. Laut Dan Sicheln (Zitat Philippe Riand?) Kommentar here:

It runs on the server jvm and uses javascript as the application language. For licensing reasons, IBM wrote their own jvm javascript engine instead of using Rhino. With Rhino shipping in java 6, they should be able to ship it in Designer 8.5 (or later). The licensing problems may have been around the extensions like @Formulas and type declarations. Classes, modules/namespaces and type declarations are coming in javascript 2 and even google is helping to get that implemented in Rhino. I'd hate to see a non-standard, javascript engine underlying the coolest web development technology in Domino.

Speaking of Rhino, the "most important new feature that is not as certain to be in 8.5 as XPages" uses Rhino and other jvm scripting languages on the client. If this makes it into the product, two years from now most new Notes applications will be written in neither Lotusscript nor Java. I'll leave it at that.

In der Tat gibt es einige Themen, wie Rhino verwendet in XPages, so mit neuester Rhino Version würde den Code arbeiten. Wie auch immer, mein Rat ist Java-Aufrufe zu verwenden.

+0

Ich finde keine Bestätigung, dass ssjs Rhino standardmäßig verwendet. Ich finde Dinge wie [diese] (http://dontpanic82.blogspot.co.uk/2010/05/using-rhino-javascript-engine-in-xpages.html) (verlinkt von [hier] (http://stackoverflow.com/questions/26695434/how-to-cleanssjs-in-domino-server-after-someone-used-javascript-prototype-in-a-)) und [dies] (https: //en.wikipedia .org/wiki/Comparison_of_server-side_JavaScript_solutions), die darauf hinweist, dass dies nicht der Fall ist. Und Rhinos hatte 'Array # Filter 'für ** Jahre **. Kannst du eine Quelle angeben? –