.push 在循环中创建的数组是正确的长度,但仅在重复时推送最后一个元素
Array created by .push in a loop is the correct length but only pushing the last element on repeat
我正在引用一个全局变量并通过它进行解析以将项目推入堆栈,然后我 return 该堆栈用于其他地方。 returned 数组的长度正确,但它重复了最后一个元素的项目。
var global = {
"param11": {
"param21": {
"param31": {
"param4": "1",
"param5": "2",
"param6": "3",
},
"param32": {
"param4": "4",
"param5": "5",
"param6": "6",
}
},
"param22": {
"param33": {
"param4": "7",
"param5": "8",
"param6": "9",
}
}
},
"param12": {
"param23": {
"param34": {
"param4": "10",
"param5": "11",
"param6": "12",
},
"param35": {
"param4": "13",
"param5": "14",
"param6": "15",
}
}
}
};
function getStack() {
var obj = {};
var stack=[];
var json = JSON.parse(global);
for(var param1 in json){
for(var param2 in json[param1]){
for(var param3 in json[param1][param2]){
obj.item1 = json[param1][param2][param3][param4];
obj.item2 = json[param1][param2][param3][param5];
obj.item3 = json[param1][param2][param3][param6];
stack.push(obj);
}
}
}
return stack;
}
返回值:
[
{"param4":"13", "param5":"14", "param6":"15"},
{"param4":"13", "param5":"14", "param6":"15"},
{"param4":"13", "param5":"14", "param6":"15"},
{"param4":"13", "param5":"14", "param6":"15"},
{"param4":"13", "param5":"14", "param6":"15"}
]
在函数开头声明 obj
时,只有一个对象存在。循环的每次迭代都会更改该对象的属性。您想要做的是在内部循环的每次迭代中创建一个新的 {}
对象。
for(var param1 in json){
for(var param2 in json[param1]){
for(var param3 in json[param1][param2]){
var obj = {};
obj.item1 = json[param1][param2][param3][param4];
obj.item2 = json[param1][param2][param3][param5];
obj.item3 = json[param1][param2][param3][param6];
stack.push(obj);
}
}
}
我正在引用一个全局变量并通过它进行解析以将项目推入堆栈,然后我 return 该堆栈用于其他地方。 returned 数组的长度正确,但它重复了最后一个元素的项目。
var global = {
"param11": {
"param21": {
"param31": {
"param4": "1",
"param5": "2",
"param6": "3",
},
"param32": {
"param4": "4",
"param5": "5",
"param6": "6",
}
},
"param22": {
"param33": {
"param4": "7",
"param5": "8",
"param6": "9",
}
}
},
"param12": {
"param23": {
"param34": {
"param4": "10",
"param5": "11",
"param6": "12",
},
"param35": {
"param4": "13",
"param5": "14",
"param6": "15",
}
}
}
};
function getStack() {
var obj = {};
var stack=[];
var json = JSON.parse(global);
for(var param1 in json){
for(var param2 in json[param1]){
for(var param3 in json[param1][param2]){
obj.item1 = json[param1][param2][param3][param4];
obj.item2 = json[param1][param2][param3][param5];
obj.item3 = json[param1][param2][param3][param6];
stack.push(obj);
}
}
}
return stack;
}
返回值:
[
{"param4":"13", "param5":"14", "param6":"15"},
{"param4":"13", "param5":"14", "param6":"15"},
{"param4":"13", "param5":"14", "param6":"15"},
{"param4":"13", "param5":"14", "param6":"15"},
{"param4":"13", "param5":"14", "param6":"15"}
]
在函数开头声明 obj
时,只有一个对象存在。循环的每次迭代都会更改该对象的属性。您想要做的是在内部循环的每次迭代中创建一个新的 {}
对象。
for(var param1 in json){
for(var param2 in json[param1]){
for(var param3 in json[param1][param2]){
var obj = {};
obj.item1 = json[param1][param2][param3][param4];
obj.item2 = json[param1][param2][param3][param5];
obj.item3 = json[param1][param2][param3][param6];
stack.push(obj);
}
}
}