0

我的文档上有一个多值字段,我想根据该值删除一个值。

我想出了这个:

var doc:NotesDocument = rowData.getDocument();
var item:NotesItem = doc.getFirstItem("ValidProjects");
var a:Array = item.getValues()

for (var v in a)
dBar.info("Before removed V=" + v );

removeFromArray(a,compositeData.ProjectID);
doc.replaceItemValue("ValidProjects",a );

for (var v in a)
dBar.info("After removed V=" + v);


doc.save();


function removeFromArray(arr, val) {
for(var i=0; i<arr.length; i++) {
    dBar.info("Value = " + arr[i] + " Remove = " + val);
    if(arr[i] == val) {
        dBar.info("Removing " + i)
        arr.splice(i, 1);
        break;
    }
   }
}

removeFromArray 被成功调用,我可以看到调试栏中显示的“Removing 0”消息,但该数组根本没有改变,值也没有被删除。有任何想法吗?

4

2 回答 2

3

将 ItemValues 视为向量。

function removeFromItemValues(java.util.Vector vector, val) {
      // see http://docs.oracle.com/javase/6/docs/api/java
      vector.remove(val);
      return vector; //Optional
}

希望有帮助

于 2012-12-22T01:13:55.373 回答
1

只是一个快速的镜头......我不确定参数是“通过引用”传递的......?

如果不是,那就是原因。我通常更喜欢使用函数来返回一个值。从编程的角度来看,我发现阅读代码的作用更清楚。在此特定示例中,您可以将代码更改为:

  function removeFromArray(arr, val) {
    for(var i=0; i<arr.length; i++) {
        dBar.info("Value = " + arr[i] + " Remove = " + val);
        if(arr[i] == val) {
            dBar.info("Removing " + i)
            arr.splice(i, 1);
            break;
        }
       }
       return arr;
    }

然后你会这样称呼它:

a = removeFromArray(a,compositeData.ProjectID);

您不写是否可以看到“之后...”消息中的变化?- 或者您只是可以在文档中看到值没有改变?

此致

/约翰

于 2012-12-21T17:41:58.983 回答