Javascript匹配更改不同数组的值

时间:2010-02-03 17:05:22

标签: javascript regex arrays

我遇到了下面几个数组和匹配方法的问题。在我的页面上,我调用了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];

        }

    }

}

非常感谢您的帮助/见解!

3 个答案:

答案 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] = ...

看起来确实如此。