Array.push 在 forEach loop.Javascript 中的 for 循环中不起作用

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 语句中,直接在输入正确的行下。

这里发生了什么?我找不到这样的东西,我已经考虑了变量的范围,但它们似乎都是正确的。

谢谢

瑞安

TKo*_*KoL 5

我认为您可能需要在每次推送之前克隆该对象:

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)