【发布时间】:2020-05-04 08:37:18
【问题描述】:
我一直在尝试将一个包含 3 个值的数组推送到一个数组以创建一个 AOA。但是我的预期输出不正确。
输入数据如下所示
[
{id:xxxxx,
date:VALUE,
date:VALUE,
..months worth
},
{id:xxxx2,
date:VALUE,
date:VALUE,
..months worth
},
..loads of entries
]
请看下面的代码片段。
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);
}
})
我得到一个包含静态日期的输出数组
[
...
[ '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 ],
...
]
当我想查看日期增量时。
[
...
[ '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 ],
...
]
我有console.log(entry),就在它被推入数组之前,我当时包含正确的信息?我已将 finalArray.push(entry) 移动到 if 语句中,直接位于输入正确的行下方。
这里发生了什么?我找不到这样的东西,我已经考虑过变量的范围,但它们似乎都是正确的。
谢谢
瑞恩
【问题讨论】:
-
您一直在将对同一
entry对象的引用推送到您的数组中。您每次都需要创建一个 new 对象。 -
@04FS 你好,我已经放弃了
entry的值,然后才将它推入数组?所以应该包含新数据? -
@Peachman1997 不,你没有,它仍然是同一个对象。您已经为该对象的属性分配了新值,但您推送的对象仍然是相同的;您推送的所有条目都指向同一个对象及其最新属性。
-
@Thomas 这对我来说没有意义......我更改了数组的属性并将带有新条目的数组推送到 finalArray 中。它同名的对象,但更新的值不更新?
-
@Peachman1997 不,我希望看到让我们在列表中说出您的名字(或其他可以识别您身份的其他名称)两次,并且一旦我“解决”了那个名字背后的人,我会见到你。但是,您现在可能看起来。不是版本 1 中的你 vs 版本 2 中的你,……你,我看着你那一刻的你;无论在此之前或之后您可以更改多少次。
标签: javascript arrays loops push