从多值字段中删除值?

时间:2012-12-21 15:37:15

标签: xpages

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

我想出了这个:

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,我可以看到调试栏中显示的“正在删除0”消息,但数组根本没有更改,并且不会删除该值。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

将ItemValues视为Vector。

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

希望有所帮助

答案 1 :(得分: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);

您不会写下您是否可以在“After ...”消息中看到更改? - 或者您只是在文档中看到值没有改变?

祝你好运

/约翰