2015-03-31 39 views
2

我引用全局变量并通过解析来将项目推送到堆栈,然后将该堆栈返回到其他位置。返回的数组是正确的长度,但它重复最后一个元素的项目。由.push在循环中创建的数组是正确的长度,但只重复最后一个元素

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"} 
] 

回答

2

在函数的开始申报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); 
     } 
    } 
} 
相关问题