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
,因此所有实例中的值都会更改
putvar 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次,其中第一次已经相当慢了。