【问题标题】:angularjs.forEach second iteration fails to set object propertyangularjs.forEach 二次迭代无法设置对象属性
【发布时间】:2015-10-26 18:47:20
【问题描述】:

我有以下带有嵌套数组的对象:

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: 无法设置未定义的属性“bar3”

【问题讨论】:

  • foo3 神奇地出现在哪里?是不是打错字了?
  • 抱歉,错字,已更正...

标签: javascript arrays angularjs object


【解决方案1】:

$scope.regonal 是一个空对象,这意味着结果 $scope.regonal[key] 将未定义。尝试访问 $scope.regonal[key]["bar3"] 意味着您尝试访问并将键 bar3 设置为 undefined。

试试这个:

$scope.regonal = {};

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

    });
});

【讨论】:

    【解决方案2】:

    您收到错误是因为$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>

    【讨论】:

      【解决方案3】:
      for(key in foobar){
          $scope.regional[key] = foobar[key].reduce(function(obj, curr){
              obj[curr] = curr;
              return obj;        
          },{});    
      }
      

      DEMO

      【讨论】:

        【解决方案4】:

        $scope.regonal[key] 返回 undefined,因为在 regonal 中没有名为 foo1 或 foo 2 的键。您可以通过 $scope.regonal[key]={} 或 $scope.regonal.key={}

        创建密钥

        【讨论】:

          猜你喜欢
          • 2015-03-14
          • 2023-03-24
          • 1970-01-01
          • 2020-01-03
          • 1970-01-01
          • 2014-11-18
          • 2010-10-03
          • 1970-01-01
          • 2016-02-26
          相关资源
          最近更新 更多