这可能是一个非常基本的问题 - 请参阅一个简单的代码:
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
问题在于每次执行 ar2.push(ar1)时,它都会覆盖ar2的所有元素。执行此代码后,我得到一个包含3个相同数组的对象。我该如何解决?
由于
答案 0 :(得分:6)
JS中的对象始终是引用(与字符串或数字不同)。每当你push
引用已经在数组中的同一个对象时,你需要克隆:
ar2.push(ar1.slice(0)); // clone ar1