将javascript对象推送到另一个javascript对象

时间:2015-03-23 17:48:09

标签: javascript

我正在尝试将两个javascript集合并为一个。我试图将产品javascript对象放入解决方案对象的Quotes属性中。因此,最终结果应该是SolutionProducts对象。

$scope.Products = {  
"id":"",
"attributes":{  
  "term":"36"
},
"groups":[  
  {  
     "products":[  
            // list of products
     ]
  }
]
}

$scope.Solution = {  
"SolutionID":"",
"Quotes":[  

]
}



$scope.SolutionProducts = {  
"SolutionID":"",
"Quotes":[  
  {  
     "id":"",
     "attributes":{  
        "term":"36"
     },
     "groups":[  
        {  
           "products":[  
                  // list of products
           ]
        }
     ]
  }
]
}

我尝试使用推送功能,但它没有工作

$scope.SolutionProducts = $scope.Solution.Quotes[0].push($scope.Products.products);

2 个答案:

答案 0 :(得分:1)

简单错误:您将Array.push方法的返回值分配给变量$scope.SolutionProducts。而是这样做:

$scope.Solution.Quotes.push($scope.Products);
$scope.SolutionProducts = $scope.Solution;

请注意,$scope.Solution$scope.SolutionProducts将具有相同的引用,这意味着您实际上不需要拥有$scope.SolutionProducts变量,并且可以继续使用$scope.Solution }。

答案 1 :(得分:1)

@MVP会给您的代码带来一个关键问题:您只想将Solution对象的引用传递给SolutionProducts对象。使用当前代码,您将$scope.SolutionProducts设置为push()函数的返回值,该函数实际上以整数形式返回数组的长度,而不是对象。 (见MDN's article on push for more

第二个问题是你实际上没有在数组上使用push

$scope.SolutionProducts = $scope.Solution.Quotes[0].push($scope.Products.products);

您将.push应用于Quotes[0],这是数组中的,而不是数组本身。你需要这样的东西:

$scope.Solution.Quotes.push($scope.Products);

现在你在正确的数组上使用push函数。

将这两个问题放在一起,你应该有一些看起来像这样的东西:

$scope.Solution.Quotes.push($scope.Products);
$scope.SolutionProducts = $scope.Solution; //sets SolutionProducts to Solution reference