我的文档中有一个多值字段,我想根据该值删除一个值。
我想出了这个:
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”消息,但数组根本没有更改,并且不会删除该值。有什么想法吗?
答案 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 ...”消息中看到更改? - 或者您只是在文档中看到值没有改变?
祝你好运
/约翰