2016-04-20 13 views
-1

Dies sieht aus wie es sollte funktionieren, aber aus irgendeinem Grund wird der indizierte Wert nicht entfernt. Ich denke, es muss etwas wirklich einfaches sein, aber ??? Hier ist der Code:Spleiß entfernt Artikel nicht von Array

var debug:Boolean = true; 
    var rtn:Array = database.getView("vwWFSApplicationsEnabled").getColumnValues(0); 
    var i:Integer = rtn.indexOf("Admin"); 
    if (debug) print ("Position of Admin = " + i + " rtn = " + rtn.toString()) 

    if (i >= 0){ 
     if (debug) print("In splice ") 
     rtn.splice(i , 1); 
     if (debug) print("after Splice " + rtn.toString()) 
    }  
    return rtn.unshift("--- Select Application ---"); 

Wenn es läuft ich dies im Protokoll:

HTTP JVM: Position von Admin = 1 RTN = [Absence Anfragen, Admin, Demo]

HTTP JVM: In Spleiß

HTTP JVM: nach Splice [Abwesenheit Anfragen, Admin, Demo]

i wird in den indexOf auf 1 gesetzt, was korrekt ist, also sollte der Spleiß (i, 1) den Wert Admin aus dem Array entfernen, aber nach dem Spleiß ist der Wert Admin immer noch in der Liste. Ich habe die Aufteilung in anderen Situationen verwendet und es funktioniert dort, aber ich sehe keinen Unterschied in diesem Code.

+0

Das sieht grundsätzlich korrekt aus. Gibt Ihr getView() ein echtes Javascript-Array zurück? Oder wahrscheinlich etwas anderes, das Spleiß nicht korrekt implementiert? – Matthias247

+1

Das sieht für mich nach TypeScript aus. –

+0

@TomMettam TypeScript hat keinen (eingebauten) 'Integer'-Typ - das 'number'-Primitiv wird stattdessen verwendet, um eine numerische Variable zu deklarieren. –

Antwort

1

Es ist klar aus dem Beispiel haben Sie Ihre eigenen benutzerdefinierten Array Typ. Ich sage das, weil:

  • Array#toString nicht ausgegeben wie das produziert (es ist nicht [] um seine Ausgänge nicht gesetzt, und es würde Anführungszeichen um String-Werte setzen)
  • Array ist keine juristische Erklärung in Typoskript
  • Ihr Code funktioniert nicht

angepaßter Array Typ Sie einfach nicht splice richtig funktioniert verwenden implementieren und wir können dieses Problem nicht ohne entsprechende c diagnostizieren Ode.

+0

meine Tags wurden vermasselt Dies ist in ssjs in XPages. –

+0

Wörtlich alles, was Sie tun müssen, um diese Frage zu beantworten, ist Google "ssjs splice" und Sie landen auf einem Blog-Post, der erklärt, dass Spleiß in SSJs nicht funktioniert. –

0

NotesView.getColumnValues(n) gibt einen Vektor (java.util.Vector) und kein SSJS-Array (com.ibm.jscript.std.ArrayObject) zurück. Daher müssen Sie Vector.remove(i) verwenden, um das angegebene Element loszuwerden. Außerdem unterstützt Vector die Verschiebung nicht - Sie müssten sie durch Vector.add(0,x) ersetzen.

Falls Sie sich für einen anderen Ansatz entscheiden, nämlich den Vektor in ein SSJS Array zu konvertieren und den Rest Ihres Codes unverändert zu lassen, möchte ich Folgendes sagen: Array.splice() funktioniert definitiv in SSJS (zumindest seit Domino 8.5 .3). Wenn ältere Versionen dies nicht unterstützen, können Sie problemlos einen Prototyp für Array.splice schreiben. Beachten Sie außerdem, dass Array.splice in der aktuellen SSJS-Implementierung etwas anders funktioniert als im clientseitigen JavaScript (CSJS): In CSJS gibt es die entfernten Elemente zurück, während es in SSJS das neu erstellte Array zurückgibt.