2017-01-06 8 views
0

Мне нужно сделать копию массива в javascript, чтобы адреса обоих массивов были разными. как это можно сделать ..angular js - копировать объект без копирования ссылки

Я попытался

$scope.users = data.users; 
$scope.usersTemp = []; 
$scope.usersTemp.push($scope.users); 

and 
$scope.usersTemp = $scope.usersTemp 
+1

Возможный дубликат [Глубокие объекты копирования в угловом?] (Http: // stackoverflow.com/questions/14360401/deep-copying-objects-in-angle) – Mistalis

ответ

0

Вы можете использовать:

angular.copy (myObjorArrayetc) 
0

, что вы пытаетесь сделать, кажется, создавая неполную копию из массива JS. Если это не ваш случай использования, сообщите мне.

Есть несколько способов сделать это в JS

const copy = [...original]; // es6 only, uses Symbol.iterator 
const copy = original.slice(); // slices the array from index 0,  
           // returning a shallow copy 

const copy = Array.from(original, val => val); // es6 only, takes an 
// array-like object with .length property and a map function 
const copy = original.map(x => x); 
// call to Array.prototype.map with identity function. 

С теми, что вы можете иметь:

const a = [1, 2]; 
const b = // shallow copy with one of the methods 
a.push(3); // and b is still [1, 2] 

Быстрое примечание относительно других ответов: быстрый взгляд на угловые документы here кажется чтобы указать, что угловая копия возвращает глубокую копию.

Действительно важно понять разницу: мелкая копия просто создаст новый объект и поместит в него все значения, а глубокая копия попытается сделать копию каждого из этих значений. Это означает, что, поскольку объекты в JS изменяемы, если вы создаете мелкую копию, вы по-прежнему делите все свои значения с другими копиями. Это не так с глубокой копией.

например:

const a1 = [{a: {b: 3}}]; 
const a2 = // shallow copy 
(a1 === 2) // false 
a1[0].a.b = 4 // reassign a prop of a value contained inside a1 
(a1[0].a.b === 4) // true 

Если глубокая копия была сделана, новый объект был бы сделан.

Заключение: используйте то, что вам нужно, в зависимости от вашего варианта использования. Неглубокая копия быстро делается, но подвержена нежелательным мутациям, глубокая копия намного дороже для создания, но невосприимчива к мутациям, вызванным доступом к доле. В качестве побочного примечания, конечно, влияние на GC этих двух подходов (что означает, что мелкая копия не освобождает ссылки на значения, содержащиеся в оригинале ).

+0

ответ, когда вы знаете рабочее решение, это догадки – cske

+0

Возможно, я ошибаюсь, но вопрос заключается в том, чтобы «сделать копию массива в javascript таким образом, чтобы адреса оба массива должны быть разными "означает создание мелкой копии массива для меня. Каждая из этих строк делает это. – adz5A

0

Вы можете использовать

уаг копия = angular.copy (объект);

Он сделает точную копию объекта.

0

При использовании операции присваивания в случае массива как копия, так и исходный объект связывают изменения. Поэтому используйте angular.copy(oldArray, newArray).

Смежные вопросы