2016-04-20 33 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中,它返回新创建的数组。