2015-03-23 4 views
0

Я пытаюсь объединить два набора javascript в один. Я пытаюсь поместить объект javascript продуктов в атрибут Quotes объекта решения. Таким образом, конечным результатом должен быть объект SolutionProducts.Нажатие javascript-объекта в другой объект javascript

$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); 
+0

Возвращаемое значение 'Array.prototype.push' не новый массив, а число элементов , – Elad

+0

Этот вопрос не имеет ничего общего с JSON, который является форматом сериализации данных. Вы просто говорите об объектах javascript. –

+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

@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 
Смежные вопросы