Соответствие Javascript изменению значения другого массива - PullRequest
0 голосов
/ 03 февраля 2010

У меня проблемы с парой массивов ниже и методом сопоставления. На моей странице я вызываю функцию Checkout (), и она устанавливает временный массив, равный массиву, который я строил, с различными параметрами. Затем он перебирает временный массив и удаляет html из одного из элементов. Проблема в том, что когда я оповещаю массив Remote.Cart.products перед циклом, он в точности повторяет его построение, но когда я снова вызываю функцию, точно такое же предупреждение показывает новые обновленные значения, даже если я не изменяю Remote. Массив 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 ]

2 голосов
/ 03 февраля 2010

Вы используете тот же массив. Просто другая переменная, которая указывает на тот же массив. В памяти это один и тот же объект.

Вам необходимо перестроить массив в цикле, чтобы получить идентичный, но новый массив.

Более подробную информацию о копировании массивов и других объектов можно найти здесь: http://my.opera.com/GreyWyvern/blog/show.dml/1725165

1 голос
/ 03 февраля 2010

Клинт, ты должен понимать, что 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

0 голосов
/ 03 февраля 2010

"хотя я не изменяю массив Remote.Cart.products где-либо в функции"

tmp = Remote.Cart.products;
...
tmp[ i ][1][j][1] = ...

Похоже, что ты есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...