这看起来应该有效,但由于某种原因,索引值未被删除。我认为它必须是非常简单的东西但是??? 这是代码:
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:Admin的位置= 1 rtn = [缺席请求,管理员,演示]
HTTP JVM:在拼接中
HTTP JVM:在Splice之后[缺席请求,管理员,演示]
我在indexOf中设置为1是正确的,因此splice(i,1)应该从数组中删除值Admin但是在拼接之后,值Admin仍然在列表中。 我已经在其他情况下使用了拆分,但它可以在那里工作,但我看不出这段代码有什么不同。
答案 0 :(得分:1)
从示例中可以清楚地看出,您有自己的自定义FileList
类型。我这样说是因为:
Array
不会产生类似的输出(它不会在其输出周围放置Array#toString
,而是会在字符串值周围加上引号)[]
不是TypeScript 您使用的任何自定义Array
类型都无法正确实现Array
,如果没有相关代码,我们无法诊断该问题。
答案 1 :(得分: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.3)。如果旧版本不支持它,您可以轻松地为Array.splice编写原型。另外,请记住,在当前的SSJS实现中,Array.splice与客户端JavaScript(CSJS)的工作方式略有不同:在CSJS中,它返回已删除的元素,而在SSJS中,它返回新创建的数组。