为什么我的javascript myarr.push(mydic)会覆盖myarr中的数据?

为什么我的javascript myarr.push(mydic)会覆盖myarr中的数据?,javascript,arrays,Javascript,Arrays,当前正在编写一个函数,该函数接受一个3D数组,并将值放入一个键/值对数组中。下面是我的代码 function arrToDictArray(array) { var myarr = []; var mydic = {}; var x = 0; for (var i in array) { console.log("i: " + i); var x = array[i]; for (var j in x) { console.

当前正在编写一个函数,该函数接受一个3D数组,并将值放入一个键/值对数组中。下面是我的代码

function arrToDictArray(array) {
  var myarr = [];
  var mydic = {};
  var x = 0;
  for (var i in array) {
    console.log("i: " + i);
    var x = array[i];
    for (var j in x) {
      console.log("j: " + j);
      mydic[array[i][j][0]] = array[i][j][1];
      console.log(mydic[array[i][j][0]]);
    }
    myarr.push(mydic);
    //console.log(myarr);
    //console.log(myarr[i]);
  }
  console.log(myarr);
  return myarr;
}
我期待着我的新阵列出现

[{name:'Mauri', salary: 100000, age:40},{name: 'felicia', salary: 120000, age:36}] 
但相反,我得到了菲莉西亚的复制品

[{name: 'felicia', salary: 120000, age:36},{name: 'felicia', salary: 120000, age:36}] 
我试图在j循环中和在I和j循环之外完全改变我的myarr.push(mydic)方法,但它仍然被覆盖。我似乎不明白为什么.push()会覆盖任何内容


我的输出。

您将同一对象(
mydic
)推到数组上多次,并在每次循环迭代中覆盖该对象内部的内容。相反,您希望为每个循环迭代创建一个新对象。请参见代码段中的两行
***

函数arrToDictArray(数组){
var myarr=[];
var mydic;//***
var x=0;
for(数组中的变量i){
mydic={};//***
//控制台日志(“i:+i”);
var x=数组[i];
对于(x中的变量j){
//控制台日志(“j:+j”);
mydic[array[i][j][0]=array[i][j][1];
//console.log(mydic[array[i][j][0]];
}
myarr.push(mydic);
}
console.log(myarr);
返回myarr;
}
阵列天线([
[
[“姓名”、“毛里”],
[“薪金”,100000],
[“年龄”,40]
],
[
[“姓名”、“费莉西亚”],
[“薪金”,120000],
[“年龄”,36]
]
]
);
。作为控制台包装器{
最大高度:100%!重要;

}
您好,这是我为最新的angularJs项目编写的示例代码,我对其进行了修改,以便您可以在纯javascript中使用它,希望它对您有用

var len = mydic.length;
for (var i = 0;i < len ; i++){
console.log(i + mydic[i]);
myarr.push({
 name: mydic[i].name,
 salary: mydic[i].salary,
 age: mydic[i].age
 })
}
var len=mydic.length;
对于(变量i=0;i
如果您向我们展示您传递到函数中的数组是什么,我们将为您提供更好的帮助。(我根据函数的功能进行了猜测,但这只是猜测…)我将我的启动放在循环之外。谢谢这起作用了。