Pea*_*997 5 javascript arrays loops push
我一直在尝试将一个包含 3 个值的数组推送到一个数组中以创建一个 AOA。但是,我的预期输出结果不正确。
输入数据如下所示
[
{id:xxxxx,
date:VALUE,
date:VALUE,
..months worth
},
{id:xxxx2,
date:VALUE,
date:VALUE,
..months worth
},
..loads of entries
]
Run Code Online (Sandbox Code Playgroud)
请参阅下面的代码片段。
arrayOfObjects.forEach(e =>{
let entry = [];
entry[0] = e.id;
let PC = Object.values(e)
let Dates = Object.keys(e)
PC.shift();
Dates.shift();
for(let i = 0; i <PC.length; i++){
if(PC[i] === 'No Data'){
entry[2] = 0;
entry[1] = Dates[i];
} else {
entry[2] = PC[i];
entry[1] = Dates[i];
}
finalArray.push(entry);
}
})
Run Code Online (Sandbox Code Playgroud)
我得到一个包含静态日期的输出数组
[
...
[ 'NAAAAD', '10/31/19', 0 ],
[ 'NAAAAD', '10/31/19', 0 ],
[ 'NAAAAD', '10/31/19', 0 ],
[ 'NAAAAD', '10/31/19', 0 ],
[ 'NAAAAD', '10/31/19', 0 ],
[ 'NAAAAD', '10/31/19', 0 ],
[ 'NAAAAD', '10/31/19', 0 ],
...
]
Run Code Online (Sandbox Code Playgroud)
当我想查看日期增量时。
[
...
[ 'NAAAAD', '10/25/19', 0 ],
[ 'NAAAAD', '10/26/19', 0 ],
[ 'NAAAAD', '10/27/19', 0 ],
[ 'NAAAAD', '10/28/19', 0 ],
[ 'NAAAAD', '10/29/19', 0 ],
[ 'NAAAAD', '10/30/19', 0 ],
[ 'NAAAAD', '10/31/19', 0 ],
...
]
Run Code Online (Sandbox Code Playgroud)
我console.log(entry)刚刚在它被推入数组之前我包含了正确的信息?我已将 移到finalArray.push(entry)if 语句中,直接在输入正确的行下。
这里发生了什么?我找不到这样的东西,我已经考虑了变量的范围,但它们似乎都是正确的。
谢谢
瑞安
我认为您可能需要在每次推送之前克隆该对象:
arrayOfObjects.forEach(e =>{
let entry = [];
entry[0] = e.id;
let PC = Object.values(e)
let Dates = Object.keys(e)
PC.shift();
Dates.shift();
for(let i = 0; i <PC.length; i++){
let newEntry = Object.assign([], entry);
if(PC[i] === 'No Data'){
newEntry[2] = 0;
newEntry[1] = Dates[i];
} else {
newEntry[2] = PC[i];
newEntry[1] = Dates[i];
}
finalArray.push(newEntry);
}
})
Run Code Online (Sandbox Code Playgroud)