2016-04-20 67 views
-1

這看起來像它應該工作,但由於某種原因索引值沒有被刪除。我認爲這一定是非常簡單的事情,但??? 下面是代碼:拼接不從陣列中刪除項目

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 ---"); 

當它運行時我在日誌中得到這樣的:

HTTP JVM:特權= 1個RTN = [缺勤請求,管理員,演示]的位置

HTTP JVM:在剪接

HTTP JVM:後剪接[缺勤請求,管理員,演示]

我在indexOf中設置爲1,這是正確的,因此splice(i,1)應該從數組中刪除Admin值,但在拼接後Admin值仍然在列表中。 我在其他情況下使用了拆分,它在那裏工作,但我看不到在此代碼中的任何區別。

+0

這看起來基本正確。你的getView()返回一個真正的純JavaScript數組嗎?或者可能有些不同的東西不能正確實現拼接? – Matthias247

+1

這看起來像TypeScript對我來說。 –

+0

@TomMettam TypeScript沒有(內置)'Integer'類型 - 使用'number'原語來聲明一個數字變量。 –

回答

1

從示例中可以看出,您有自己的自定義Array類型。我這樣說是因爲:

  • Array#toString不會產生這樣的輸出(它不把[]圍繞它的輸出,這將令周圍的字符串值引號)
  • Array不打字稿法律聲明
  • 您的代碼不工作

任何自定義您使用根本不正確執行splice和未經有關部門此外我們還不能診斷這個問題Array類型頌。

+0

我的標籤搞砸了,這是在XPages中的ssjs。 –

+0

爲了回答這個問題,你需要做的只是Google「ssjs splice」,你將登陸博客文章解釋拼接在ssjs中不起作用。 –

0

NotesView.getColumnValues(n)返回一個Vector(java.util.Vector)而不是SSJS數組(com.ibm.jscript.std.ArrayObject)。因此,您必須使用Vector.remove(i)來擺脫給定的元素。另外,Vector不支持unshift - 你將不得不用Vector.add(0,x)來替換它。

如果您決定採用不同的方法,即將Vector轉換爲SSJS數組,並保持代碼的其餘部分不變,我想聲明以下內容:Array.splice()絕對適用於SSJS(至少從Domino 8.5 0.3)。如果舊版本不支持它,您可以輕鬆地爲Array.splice編寫一個原型。此外,請記住,在當前的SSJS實現中,Array.splice的工作方式與客戶端JavaScript(CSJS)略有不同:在CSJS中,它返回已移除的元素,而在SSJS中,它返回新創建的數組。