将对象列表推送到angularjs中的另一个对象

时间:2019-02-20 06:25:49

标签: javascript arrays angularjs object

我有两个单独的对象,如下所示

Object1 =  [{value:'A/B'},{value:'A/B/C'},{value:'A/F'},{value:'A/'}];

Object2 =[{option:'A/'},{option:'A/B'}];

现在,我需要通过添加新属性来修改 Object2 ,以便Object2必须看起来像这样

 Object2 = [{option:'A/',
            directories:[{value:'A/'},{value:'A/B'},{value:'A/B/C'},{value:'A/F'}]},
           {option:'A/B',
            directories:[{value:'A/B'},{value:'A/B/C'},{value:'A/F'},{value:'A/'}]}];

我需要的改变是

  • 在“目录”属性中,第一个值应为选项值

  • 其他值应该是来自Object1的其余值

我尝试了以下代码

angular.forEach(Object2,function(value,key){

 angular.forEach(Object1,function(value,key){

        //I need the code here

  });
});

2 个答案:

答案 0 :(得分:1)

尝试以下

  angular.forEach($scope.Object2,function(value,key){
      value.directories = angular.copy($scope.Object1);
      for (var i=0; i < value.directories.length; i++) {
        if (value.directories[i].value === value.option) {
            var item = value.directories.splice(i,1);  
            value.directories.unshift(item[0]);
            break;
        }
      }
  });

基本上,在将目录数组添加到对象之后,您可以在数组的开头找到要删除的对象的索引,然后将其删除并重新添加到数组的开头。

Demo

答案 1 :(得分:0)

为什么要迭代两次?您只能使用一个forEach循环和一个具有解构功能的箭头函数:

angular.forEach($scope.Object2, { directories } => directories = $scope.Object1);