我遇到了下面几个数组和匹配方法的问题。在我的页面上,我调用了Checkout()函数,它设置了一个临时数组,该数组等于我用不同选项构建的数组。然后循环遍历临时数组并从其中一个元素中删除html。问题是当我在循环之前警告数组Remote.Cart.products时它与构建完全一样,但是当我再次调用该函数时,完全相同的警报显示新的更新值,即使我没有修改远程。 Cart.products数组中的任何数组。
function Checkout() {
tmp = null;
tmp = Remote.Cart.products;
alert( Remote.Cart.products );
for ( i = 0, li = tmp.length; i < li; i++ ) {
for ( j = 0, lj = tmp[ i ][1].length; j < lj; j++ ) {
tmp[ i ][1][j][1] = tmp[ i ][1][j][1].match(/<a\s+[^>]*href="([^\"]*)"[^>]*>(.*)<\/a>/i)[2];
}
}
}
非常感谢您的帮助/见解!
答案 0 :(得分:2)
您正在使用相同的阵列。只是一个指向同一个数组的不同变量。在记忆中,它是同一个对象。
您需要在循环中重建数组,以便获得相同但新的数组。
有关复制数组和其他对象的更多信息,请访问:http://my.opera.com/GreyWyvern/blog/show.dml/1725165
答案 1 :(得分:1)
Clint,你必须明白tmp和Remote.Cart.products是同一个数组的不同名称。如果要克隆数组,请执行:
var tmp = [];
for(var i = 0; i < Remote.Cart.products.length; i++)
{
tmp[i] = []
for(var j = 0; j < Remote.Cart.products[i].length; j++)
{
tmp[i][j] = [];
for(var k = 0; k < Remote.Cart.products[i][j].length; k++)
{
tmp[i][j][k] = Remote.Cart.products[i][j][k].slice();
}
}
}
编辑:由于Squeegy
,纠正了嵌套答案 2 :(得分:0)
“即使我没有在函数”
中的任何位置修改Remote.Cart.products数组tmp = Remote.Cart.products;
...
tmp[ i ][1][j][1] = ...
看起来确实如此。