循环遍历字段以及对象中包含的所有类和列表(angularJs)

时间:2016-03-15 11:10:16

标签: javascript angularjs for-loop

我想使用angular将字段复制到另一个字段,所以我使用这个循环:

        for (var k in $scope.customer) {
        $scope.customer[k].fr = $scope.customer[k].en;
        $scope.customer[k].es = $scope.customer[k].en;
    }

但问题是循环只适用于普通字段(int,string ...),这意味着:循环不适合我对象中的列表和类。 有没有办法循环遍历字段以及我的对象中包含的所有类和列表?

更新

例如,我想将字段“en”复制到“fr”和“es”字段。

我的模特:CompanyName(en: String, fr: Option[String], es: Option[String])

要做到这一点,我应该写:

$scope.customer.Company.CompanyName.fr = $scope.customer.Company.CompanyName.en;
$scope.customer.Company.CompanyName.fr = $scope.customer.Company.CompanyName.es;

有什么方法可以使用循环来应用它吗?没有指定每个字段?

3 个答案:

答案 0 :(得分:1)

您可以尝试使用我在此处实现的深层复制功能(我测试了它,它可以工作):

function deepCopyEn(src) {

  if (src.hasOwnProperty("en")) {
    src.fr = src.en;
    src.es = src.en;
  }
  else {
    if (src.constructor === Array) {
      for (var i = 0; i < src.length; i++) {
          deepCopyEn(src[i]);
      }
    }
    else {
      for (var prop in src) {
        if(src.hasOwnProperty(prop)) {
            deepCopyEn(src[prop]);
        }
      }
    }
  }
}

用法:

deepCopyEn($scope.customer);

您可以对其进行测试here

答案 1 :(得分:0)

为什么不试试foreach循环:

$scope.customer.forEach(function(cust){ 
// work with cust
});

它将获得cutomer对象的所有属性。

答案 2 :(得分:0)

您可以使用angular.copy()创建英文版的完整深层副本:

for (var k in $scope.customer) {
    $scope.customer[k].fr = angular.copy($scope.customer[k].en);
    $scope.customer[k].es = angular.copy($scope.customer[k].en);
}

稍后会覆盖其他语言的语言特定字段。她是[{1}}:http://www.tothenew.com/blog/angularjs-copy-vs-extend/

的来源