Javascript 推送时修改对象数组元素

Javascript 推送时修改对象数组元素,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我有一个空数组 var kpi_arr = []; 我推入一个物体 { kpi_id: "18", kpi_name: "CSAT", kpi_target: "7", kpi_months: [ { monthname: "Aug 2017", month_value: "", month_id: "201", month_kpi: "18" }, {

我有一个空数组

var kpi_arr = [];
我推入一个物体

{
   kpi_id: "18",
   kpi_name: "CSAT",
   kpi_target: "7",
   kpi_months: [
      {
         monthname: "Aug 2017",
         month_value: "",
         month_id: "201",
         month_kpi: "18"
      },
      {
         monthname: "Sep 2017",
         month_value: "",
         month_id: "301",
         month_kpi: "18"
      }
   ]
}
数组现在有一个具有正确值的对象。但是当我推第二个物体时

{
   kpi_id: "16",
   kpi_name: "Updated handbooks",
   kpi_target: " 100%",
   kpi_months: [
      {
         monthname: "Aug 2017",
         month_value: "",
         month_id: "201",
         month_kpi: "16"
      },
      {
         monthname: "Sep 2017",
         month_value: "",
         month_id: "301",
         month_kpi: "16"
      }
   ]
}
数组内容如下所示

[
{
   kpi_id: "18",
   kpi_name: "CSAT",
   kpi_target: "7",
   kpi_months: [
      {
         monthname: "Aug 2017",
         month_value: "",
         month_id: "201",
         month_kpi: "16"
      },
      {
         monthname: "Sep 2017",
         month_value: "",
         month_id: "301",
         month_kpi: "16"
      }
   ]
},
{
   kpi_id: "16",
   kpi_name: "Updated handbooks",
   kpi_target: " 100%",
   kpi_months: [
      {
         monthname: "Aug 2017",
         month_value: "",
         month_id: "201",
         month_kpi: "16"
      },
      {
         monthname: "Sep 2017",
         month_value: "",
         month_id: "301",
         month_kpi: "16"
      }
   ]
}
]
请注意,所有month\u kpi属性值都更改为16。 这可能是什么原因? 我通过下面格式的for循环将这些对象推入数组

var rolling_months_arr = get_rolling_13month_period();
var kpi_arr = [];

for(){
 var month_kpi = getValueFromWherever();
 var myobject = getObject(rolling_months_arr, month_kpi)
 kpi_arr.push(myobject )
}


//------------------------------------------
function getObject(rolling_months_arr, month_kpi)
{       
    for ( var i = 0; i < rolling_months_arr.length; i++)
    {
        rolling_months_arr[i].month_kpi = month_kpi;
    }

    return rolling_months_arr;
}

function get_rolling_13month_period()
{       
    var month_arr = [];             
    for(){
      month_arr.push({ "monthname": rolling_month,  "month_id": month_id });
      }
    return month_arr;
}
var rolling_months_arr=get_rolling_13 month_period();
var kpi_arr=[];
for(){
var monthu kpi=GetValueFromWhere();
var myobject=getObject(滚动月、月、kpi)
kpi_arr.push(myobject)
}
//------------------------------------------
函数getObject(滚动月、月、kpi)
{       
对于(变量i=0;i
rolling\u months\u arr
正在被重用,您需要在
for()中创建一个新的

每次添加到array.push时,都使用相同的
rolling\u months\u arr
,因此所有实例中的值都会更改

put
var rolling\u months\u arr=get\u rolling\u 13month\u period()位于()的

或克隆该变量:

for(){
var monthu kpi=GetValueFromWhere();

rolling_months_arr=u.cloneDeep(rolling_months_arr);//问题出在getObject()内部……推送与此无关显示getObject和@Akrion我已经更新了post@UXDart检查更新的帖子除此之外还有其他方法吗?我不这么做的原因是因为运行get_rolling_13 month_period()多次通过For循环对我来说有点“昂贵”,因为它从另一个系统获取数据,For循环运行大约46次。这意味着我获取数据46次,其中第一次已经相当慢了。