当数组具有自定义属性时的angular.copy

kar*_*una 5 javascript arrays copy angularjs

考虑以下示例:

var ar = [4, 2, 3];
ar.$x = 'something';
var br = angular.copy(ar);
console.dir(br);
Run Code Online (Sandbox Code Playgroud)

br不再具有$x属性,因为在复制数组时,角度迭代for (;;;)不会看到自定义属性(如果它迭代,for in那么它将起作用).

我该怎么做?

  1. 像类一样创建数组然后赋值属性;
  2. 如果是错误,请报告角度;
  3. 更改我的代码,因为将属性赋值给数组不是好习惯;

Ant*_*ton 5

尝试angular.merge() 这是一个包含可枚举属性的深层副本.

var ar = [4, 2, 3];
ar.$x = 'something';
var br = angular.merge([], ar);
console.dir(br);
Run Code Online (Sandbox Code Playgroud)

产量

Array[3]
  0: 4
  1: 2
  2: 3
  $x: "something"
  length: 3
  __proto__: Array[0]
Run Code Online (Sandbox Code Playgroud)

  • 讨厌破坏好心情,但是`merge()`确实**不是**做一个深层复制,它只是用`ar`扩展`br`.如果你之后改变`ar`,比如'ar.y ='x',那么`br`也会保持`y:'x'.概念证明 - >**http://plnkr.co/edit/idH8tKqRb2zGXT817UvV?p =预览** (2认同)