.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);
        }
    }
}