2015-10-26 66 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 = {}