为什么我的javascript myarr.push(mydic)会覆盖myarr中的数据?
当前正在编写一个函数,该函数接受一个3D数组,并将值放入一个键/值对数组中。下面是我的代码为什么我的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.
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
如果您向我们展示您传递到函数中的数组是什么,我们将为您提供更好的帮助。(我根据函数的功能进行了猜测,但这只是猜测…)我将我的启动放在循环之外。谢谢这起作用了。