拼接不从数组

时间:2016-04-20 16:52:13

标签: xpages-ssjs

这看起来应该有效,但由于某种原因,索引值未被删除。我认为它必须是非常简单的东西但是??? 这是代码:

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仍然在列表中。 我已经在其他情况下使用了拆分,但它可以在那里工作,但我看不出这段代码有什么不同。

2 个答案:

答案 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中,它返回新创建的数组。