2015-10-26 33 views
0

我有嵌套陣列下列對象:angularjs.forEach第二次迭代沒有設置對象屬性

var foobar = { 
     "foo1": ["bar1", "bar2"], 
     "foo2": ["bar3", "bar4"] 
     } 

我需要將其轉換爲:通過第一

{ 
    "foo1": {"bar1":"bar1", "bar2":"bar2"}, 
    "foo2": {"bar3":"bar3", "bar4":"bar4"} 
} 

功能下面迭代元素的對象成功:

$scope.regonal = {}; 

angular.forEach(foobar, function(value, key) { 
    angular.forEach(value, function(v) { 

     $scope.regonal[key][v] = v; 

    }); 
}); 

...但第二次失敗,錯誤:

TypeError: Cannot set property 'bar3' of undefined

+0

創建密鑰,'foo3'在哪裏奇蹟般地出現?這是一個錯字嗎? – charlietfl

+0

抱歉,錯字,更正... – qwaz

回答

1

$scope.regonal是一個空對象,表示結果爲 $scope.regonal[key]將不確定。嘗試訪問$scope.regonal[key]["bar3"]意味着您嘗試訪問並設置未定義的關鍵欄3。

試試這個:因爲沒有命名regonal foo1或富2鍵

$scope.regonal = {}; 

angular.forEach(foobar, function(value, key) { 
    $scope.regonal[key] = {}; 
    angular.forEach(value, function(v) { 
     $scope.regonal[key][v] = v; 

    }); 
}); 
1

你得到錯誤,因爲$scope.regonal[key](沒有在$scope.regonal任何財產的鑰匙foo1foo2)爲undefined,你應該把它設置爲空對象,

var foobar = { 
 
    "foo1": ["bar1", "bar2"], 
 
    "foo2": ["bar3", "bar4"] 
 
}; 
 

 
var $scope = {}; // just for example 
 

 
$scope.regonal = {}; 
 

 
angular.forEach(foobar, function(value, key) { 
 
    $scope.regonal[key] = {}; 
 

 
    angular.forEach(value, function(v) { 
 
    $scope.regonal[key][v] = v; 
 
    }); 
 
}); 
 

 
console.log($scope.regonal);
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular.js"></script>

1
for(key in foobar){ 
    $scope.regional[key] = foobar[key].reduce(function(obj, curr){ 
     obj[curr] = curr; 
     return obj;   
    },{});  
} 

DEMO

0

$ scope.regonal [關鍵]返回undefined。您可以通過$ scope.regonal [key] = {}或$ scope.regonal.key = {}