2013-11-10 4 views
2

В настоящее время я занимаюсь курсом для университета. Я пытаюсь скопировать отдельное значение старого массива в новый массив, а затем установить значение старого массива равным 0. Очевидно, что если я просто присваиваю значение новому массиву, измените значение старого массива, он перезапишет новый массив тоже.Копирование элемента существующего массива в новый массив без использования сращивания?

Мне не разрешено использовать функцию splice().

вот мой код:

function rankedScores(web, pattern) { 
    var v = urlScores(web, pattern); 
    var sorted = []; 
    var maxIndex = 0; 
    while (sorted.length < v.length) { 
     for (var i = 0; i < v.length; i += 1) { 

      if (v[i].score > v[maxIndex].score) { 
       maxIndex = i 
      } 
     } 
     sorted[sorted.length] = v[maxIndex]; 
     v[maxIndex].score = 0; 

     maxIndex = 0; 
    } 
    alert(sorted[0].url + ' ' + sorted[0].score) 
    alert(sorted[1].url + ' ' + sorted[1].score) 
    alert(sorted[2].url + ' ' + sorted[2].score) 
} 

Если я сделать это возвращает правильное значение URL, но все значения являются оценка 0.

Любые идеи о том, как я могу остановить массивы из указывая в том же месте памяти?

Ive пытался использовать для цикла, как ив видел это делает неполную копию, но оно не работает

Приветствия.

+0

Один из вариантов заключается в том, чтобы просто отменить оценку, а затем установить ее во вторичном цикле. Другой, чтобы просто установить всю запись массива в нуль и проверить это, прежде чем делать сравнение ... –

ответ

1

Заменить:

sorted[sorted.length] = v[maxIndex]; 
v[maxIndex].score = 0; 

с:

// ... 

var clone = {}; 
for(var i in v[maxIndex]) 
    clone[i] = v[maxIndex][i]; 
sorted[sorted.length] = clone; 

v[maxIndex].score = 0; 

// ... 

Конечно, вы не указано, насколько глубоко ваши объекты - Я предполагаю, что они простые key:value карты, но это должно быть достаточно, чтобы направить вы в правильном направлении.

+0

Спасибо! работал шарм. Я попытался использовать цикл, чтобы заменить значение, но я не рассматривал возможность использования отдельной переменной для хранения записи. Огромное спасибо!! – mwild