2013-11-29 3 views
3

Я сделал код, который удаляет '-1' в массиве, но я не хочу изменять оригинальный.javascript '=' работает как связанный объект?

нижеследующий это тот.

var original = [ 1, 2, 3, 4, -1, -1 ]; 
var temp = original; 
for (var i = (temp.length - 1); i >= 0; i--) { 
    if (temp[j] == -1) { 
    temp.splice(i, 1); 
} 

после скрипта выполняется. оригинал [1, 2, 3, 4] и температура также [1, 2, 3, 4]

как оригинал, так и температура изменены!

Почему?

+0

, и вы, вероятно, захотите узнать, как это исправить: [Копирование массива по значению в javascript] (http://stackoverflow.com/q/7486085/218196). –

ответ

2

Это происходит потому, что есть только один массив - просто обе переменные имяже массив. Как и у человека (с прозвищами), у одного объекта может быть много имен.

= (назначение) оператор в JavaScript имеет не копировать/клон/дубликат объекта назначается.

В Array.splice функции мутирует массив (из которых есть только один), который, когда принимается с выше, объясняет поведение.

Для создания мелкого клонирования массива может использоваться arr.slice(0).

+0

Благодарим вас за разъяснение о = operator. – Isitea

1

Это потому, что вы используете только один массив.

var temp = original; 

Также следует упомянуть, что equal= operator не копирует объект.

Вы можете попробовать что-то вроде этого, чтобы достичь того, чего вы хотите:

var temp = original.slice(0); 
Смежные вопросы