首页 > 解决方案 > 为什么数组只注册最后一个对象多次Nodejs

问题描述

我试图用 n 个对象填充一个数组,但它只注册最后一个对象 n 次这是我的代码:

async function show(carId,debut,fin){
    let score = {}
    let array = [];
    res = await ScoreData(carId);
    for(i = 0; i < res.entries.length ; i++){
        
        date = res.entries[i].Timestamp._.toISOString().slice(0, 10);
        if (date >= debut && date <= fin){
            score.roadSpeed_1 = (res.entries[i].speed_1._)/((res.entries[i].speed_1._)+ (res.entries[i].speed_2._) + (res.entries[i].speed_3._))*10000;
            score.roadSpeed_2 = (res.entries[i].speed_2._)/((res.entries[i].speed_1._)+ (res.entries[i].speed_2._) + (res.entries[i].speed_3._))*10000;
            score.roadSpeed_3 = (res.entries[i].speed_3._)/((res.entries[i].speed_1._)+ (res.entries[i].speed_2._) + (res.entries[i].speed_3._))*10000;
            score.Acceleration = Math.round(res.entries[i].millage._ / res.entries[i].Vehicle_speed._)
            console.log(res.entries[i].millage._ / res.entries[i].Vehicle_speed._)
            array.push(score);
        }
    }
    console.log(array)   
}

这是结果:

[
  { roadSpeed_1: 100, roadSpeed_2: 0, roadSpeed_3: 0, Acceleration: 4 },
  { roadSpeed_1: 100, roadSpeed_2: 0, roadSpeed_3: 0, Acceleration: 4 },
  { roadSpeed_1: 100, roadSpeed_2: 0, roadSpeed_3: 0, Acceleration: 4 },
  { roadSpeed_1: 100, roadSpeed_2: 0, roadSpeed_3: 0, Acceleration: 4 },
  { roadSpeed_1: 100, roadSpeed_2: 0, roadSpeed_3: 0, Acceleration: 4 },
  { roadSpeed_1: 100, roadSpeed_2: 0, roadSpeed_3: 0, Acceleration: 4 },
  { roadSpeed_1: 100, roadSpeed_2: 0, roadSpeed_3: 0, Acceleration: 4 },
  { roadSpeed_1: 100, roadSpeed_2: 0, roadSpeed_3: 0, Acceleration: 4 },
  { roadSpeed_1: 100, roadSpeed_2: 0, roadSpeed_3: 0, Acceleration: 4 }
]

标签: node.jsarraysobjectazure-table-storage

解决方案


JavaScript 中的对象是通过引用传递的。当多个变量设置为存储对象、数组或函数时,这些变量将指向内存中相同的分配空间。参考通过。来源:链接

我猜更好的解决方案:

array.push({roadspeed_1: operation 1, roadspeed_2: operation 2 ,roadspeed_3: operation 3 });
    

推荐阅读