2016-03-01 1 views
0

У меня есть серия массивов, заполненных объектами - в формате JSON. Они выглядят примерно так:Объединение серии массивов в один «родительский» массив (AngularJS)

Группа 1

[ 
    { "name" : "John", 
     "age" : "31" 
    }, 
    { "name" : "Bob", 
     "age" : "33" 
    } 
] 

Группа 2

[ 
    { "name" : "Jim", 
     "age" : "46" 
    }, 
    { "name" : "Harry", 
     "age" : "23" 
    } 
] // ... and so on ... 

В Угловое, как я могу присоединиться два массива, чтобы сформировать массив массивов? Я предполагаю, что это group1.concat(group2), или что-то в этом роде? Я не уверен, где это сделать, если бы я сделал это в контроллере?

В настоящее время у меня есть свойство $ scope, назначенное каждой переменной, я бы создал новое свойство $ scope, которое было объединенным массивом каждого из них?

И это будет что-то вроде:

$scope.allGroups = [] 

$scope.allGroups = $scope.group1.concat($scope.group2) 

// since 'allGroups', 'group1', and 'group2' have all been defined can I do... 

allGroups = group1.concat(group2) // ...or does $scope need to be used each time? 

Мое намерение (с необходимыми фильтрами), чтобы иметь возможность сделать нг-повторить все группы, как они будут теперь быть связаны с одним $ рамки переменная.

Я уверен, что это связано с ошибками, но я подумал, что лучше дать какой-то плохой код, чем ничего, просто так было более очевидно, что я пытался сделать. Если есть лучшие подходы (которые, я уверен, есть), я все уши.

Заранее спасибо

+0

Как вы хотите результат? –

+2

Вы хотите получить один массив, содержащий Джона, Боба, Джима и Гарри? Это не то же самое, что массив массивов. – user814425

+0

Хорошая точка. Ну, было бы полезно иметь его как единый массив объектов, но я бы хотел, чтобы опция также имела его как массив массивов, поэтому каждая «группа» была организована как таковая, а не просто массив «людей», если в этом есть смысл. Короче говоря, я хотел бы знать, как к обоим. – Paulos3000

ответ

2

Вы правы, array1.concat(array2) - хороший способ использования.

Теперь вопрос в том, что вам нужно group1 и group2 быть на вашем $scope? Вам нужно отобразить их?

Если ответ нет, то вы могли бы просто сделать следующим образом:

  • Recover два массива и хранить их в 2 «частные» переменные
  • Concat их в переменную установить в ваш $scope

Вам не нужно устанавливать переменную в $scope, если вы ее не отобразите.Это будет выглядеть следующим образом:

$scope.allGroups = group1.concat(group2) 

В противном случае, нет другого выбора, чем сделать, как вы сказал:

$scope.allGroups = $scope.group1.concat($scope.group2) 

EDIT

Если вы хотите массив, содержащий group1 и group2 массивы , а не только их содержание, вы можете просто использовать метод push() следующим образом:

$scope.allGroups = []; 
$scope.allGroups.push(group1, group2); 
+0

Конечно, в случае $ scope.allGroups = group1.concat (group2), тот факт, что allGroups привязан к объекту $ scope, сделает его видимым ... group1 и group2 не нужно прикреплять, поскольку они находятся в новой переменной ...? – Paulos3000

+1

Нет, им это не нужно, поскольку функция 'concat' создает новый объект (тот, который связан с' $ scope.allGroups', таким образом, привязан к вашей области). – Erazihel

+0

Итак, array1.concat (array2) выплескивает один простой массив, заполненный объектами? Есть ли способ сделать массив allGroups массивным массивом, заполненным [array1], [array2] и т. Д. ...? – Paulos3000

0

Если вы хотите, чтобы иметь возможность получить доступ к каскадному массиву из ваших взглядов вы должны прикрепить каскадный массив в $scope объекте, так что вам придется использовать

$scope.allGroups = $scope.group1.concat($scope.group2) 

В случае, если вы оставите var allGroups, не прикрепленный к объекту $scopeallGroups будет локальной переменной для функции контроллера и будет доступен только через затвор

+0

Как я уже сказал выше: я не уверен, почему мне нужно прикрепить массивы group1 и group2 к $ scope, так как они привязаны ко всем группам, которые сами привязаны к $ scope ...? – Paulos3000

+0

@ Paulos3000, если по какой-либо причине, как с отфильтрованными результатами, вам нужно отобразить отдельные массивы, то да приложите их к '$ scope', иначе нет. В общем, все, что привязано к '$ scope', видимо для шаблона и возможные накладные расходы для фреймворка, поскольку, возможно, его нужно будет наблюдать за изменениями от углового – eltonkamami

1

Вы можете использовать concat() для объединения одного массива с другим. Функция concat() возвращает массив.

Вот код:

$scope.a = [1,2]; 
$scope.b = [3,4]; 
$scope.c = $scope.a.concat($scope.b); 

 Смежные вопросы

  • Нет связанных вопросов^_^