数组引用:将对象添加到对象数组

use*_*490 0 javascript

这可能是一个非常基本的问题 - 请参阅一个简单的代码:

var ar1=[];
var ar2=[];
ar1[0] = 'Constant';
ar1[1] = data.attr.const;
ar2.push(ar1);  //OK, ar2 contains one array of two correct elements

ar1[0] = 'R-squared';
ar1[1] = data.attr.rsq;
ar2.push(ar1);   // Not OK - ar2 contains 2 identical arrays

ar1[0] = 'R-sq. adjusted';
ar1[1] = data.attr.rsqadj;
ar2.push(ar1);   // Not OK - ar2 contains 3 identical arrays
Run Code Online (Sandbox Code Playgroud)

问题是每次执行ar2.push(ar1)时,它都会覆盖ar2的所有元素.执行此代码后,我得到一个包含3个相同数组的对象.我该如何解决?

谢谢

elc*_*nrs 6

JS中的对象始终是引用(与字符串或数字不同).每当您push引用已在数组中的同一对象时,您需要克隆:

ar2.push(ar1.slice(0)); // clone ar1
Run Code Online (Sandbox Code Playgroud)