Javascript 如何更新数组范围变量中的值?

Javascript 如何更新数组范围变量中的值?,javascript,xpages,Javascript,Xpages,我有一个存储存档的作用域变量: viewScope.MY_SCOPE = new Array(); viewScope.MY_SCOPE.push(["id0", 0, true]); viewScope.MY_SCOPE.push(["id1", 1, false]); viewScope.MY_SCOPE.push(["id2", 3, true]); 现在我想更新其中一项 viewScope.MY_SCOPE[1][2] = "true"; 此操作失败,错误如下: 执行JavaScri

我有一个存储存档的作用域变量:

viewScope.MY_SCOPE = new Array();
viewScope.MY_SCOPE.push(["id0", 0, true]);
viewScope.MY_SCOPE.push(["id1", 1, false]);
viewScope.MY_SCOPE.push(["id2", 3, true]);
现在我想更新其中一项

viewScope.MY_SCOPE[1][2] = "true";
此操作失败,错误如下:

执行JavaScript操作表达式时出错
put(int-index,FBSValue值)
JavaWrapperObject
中不受支持


如何更新数组中的特定项?

在范围变量中存储数组时,我喜欢将值放入正确类型的javascript变量中,进行编辑,然后用更新后的值替换范围变量

在你的情况下,我会做以下工作:

var tempVar = viewScope.MY_SCOPE.toArray();  //convert to array to make sure properly typed
tempVar[1][2] = true;
viewScope.put(MY_SCOPE,tempVar);
更新: 在测试了你的代码和我的代码之后,我也得到了同样的错误。老实说,我从一开始就不会弄乱多维数组。这是使用一系列对象的绝佳机会:

var tempVar = [];  // initialize the array

tempVar.push({val1:"id0",val2:0,val3:true});
tempVar.push({val1:"id1",val2:1,val3:false});
tempVar.push({val1:"id2",val2:3,val3:true});
viewScope.put("MY_SCOPE",tempVar);
然后更改所需的值:

var tempVar = [];
tempVar = viewScope.get("MY_SCOPE");
tempVar[1].val3 = true;
viewScope.put("MY_SCOPE",tempVar)

我测试了这个方法,效果很好。

将SSJS数组对象添加到作用域时,它会转换为java.util.Vector。因此,如果要设置该值,应使用

viewScope.MY_SCOPE[1].set(2,"true");
而不是
viewScope.MY_SCOPE[1][2]=“true”


我认为问题在于使用
…[2]=“true”
试图执行给定对象的
put
方法。虽然
put
在HashMaps或scope映射等映射中可用,但向量使用
set
而不是
put
来更改值。因此,您会得到“操作表达式put(…)not supported”错误。与此相反,使用
viewScope.MY_SCOPE[1][2]
获取变量没有问题,因为
get
方法在哈希图和向量中都可用。

在上述代码中,
viewScope.MY_SCOPE[1][2]
返回
false
。您的错误表明您在某种程度上滥用了您的库。你能给我们更多的相关代码吗?@creditenson你是对的,我编辑了这就是。。没有更具体的了。。我只需要更新一个数组项。。是否有特定的方法使用数组的.PUT来更新项?在纯javascript中,这种赋值是可以的。但是,由于存在与中类似的错误,我认为这与XPages及其使用方式有关。问题可能是数组存储在viewScope中,这是一个Java HashMap。所以有一个问题与如何通过哈希映射到达数组有关。Michael的答案解决了这个问题,首先得到数组并将其放入变量中。然后按预期处理本地对象/数组,然后将其放回存储范围。相同错误:JavaWrapperObjectwhoops中不支持put(int index,FBSValue value)。。。viewScope.put(“我的范围”,tempVar);迈克尔-我编辑了你的代码,把引号放进去了。我认为这应该很好。我不是JavaScript数组方面的专家。你确定这在纯javascript中可以工作吗?需要更新吗?可能是tempVar[“1”][2]?只是猜测而已。我不介意在纯javascript中看到这种数组的一些东西。也许你最好在数组中放置一个对象我修改了我的答案,用一个对象数组代替多维数组。