2015-12-31 2 views
3

У меня есть две переменные массива: var1 и var2.Как объединить или объединить два массива

$scope.var1 = { 
"0":{"subjectId":"1","subjectShortName":"English","subjectCode":null,"IsSelected":true}, 
"1":{"subjectId":"2","subjectShortName":"Hindi","subjectCode":null,"IsSelected":true} 
}; 

$scope.var2 = {"classId":"3","typeOfSubject":"main"} 

Как я могу объединить или объединить эти два массива, чтобы получить массив ниже? В основном я хочу добавить все subjectId в качестве ключа ко второму массиву.

$scope.var2 = {"classId":"3","typeOfSubject":"main", "subjectId":"{1,2}"} 
+5

Просто общий комментарий: я не вижу ни одного массива в вашем коде прямо сейчас. – Sirko

+0

У меня нет ответа, но я просто понимаю, кто знает больше меня. Какими объектами является первый var? Кажется, объект с другими двумя объектами ...Я знал массив объектов (например, JSON), но это совсем другое. Может ли кто-нибудь объяснить? Или это что-то вроде строки, используемой только angularjs? – Gianca

+0

Что @Sirko говорит, что это объекты. – itamar

ответ

1

Ваши ожидания не ясно. В любом случае, следуя вашему запросу здесь. Он добавит к объекту var1 значение var2 в виде списка целых чисел.

var subjectIds = []; 
for(var k in $scope.var1) { 
    subjectIds.push(parseInt($scope.var1[k].subjectId)); 
} 
$scope.var2.subjectId = subjectIds.join(', '); 

Результаты в

{ classId: '3', typeOfSubject: 'main', subjectId: "1, 2" } 
+0

может быть subjectId: «1,2»? Строка вместо массива. Например {classId: '3', typeOfSubject: 'main', subjectId: '1, 2'} – fresher

2

В вашем примере вы используете объекты, а не массивы. Но я оставляю здесь, как присоединиться к двум объектам. https://docs.angularjs.org/api/ng/function/angular.extend

В вашем случае:

$scope.new_var = angular.extend({}, $scope.var1, $scope.var2) 

.

Если вы собираетесь использовать массив, я не знаю нативную функцию в angularjs.

Вы можете использовать JQuery>http://api.jquery.com/jquery.merge/

Или Javascript

var hege = ["Cecilie", "Lone"]; 
var stale = ["Emil", "Tobias", "Linus"]; 
var children = hege.concat(stale); 
+0

Он не похож на этот ответ на вопрос –

0

Похоже, что вы хотите, чтобы объединить эти объекты, так что результат выглядит следующим образом:

{ 
    "classId": "3", 
    "typeOfSubject": "main", 
    "subjectId": { 
     "1": {"subjectId": "1", "subjectShortName": "English", ...} 
     "2": {"subjectId": "2", "subjectShortName": "Hindi", ...} 
    } 
} 

Этот не требует какой-либо угловой поддержки для выполнения, но вы можете использовать angular.forEach итерировать ваш var1 объект легко:

$scope.var2.subjectId = {}; 

angular.forEach($scope.var1, function(subject){ 
    this[subject.subjectId] = subject; 
}, $scope.var2.subjectId); //set "this" to the member of var2 we're populating 
+0

хотите, как это ... { "Classid": "3", " typeOfSubject": "главный", " subjectId": "1,2" } – fresher

+0

Должно быть очевидно, что вы можете изменить функцию обратного вызова forEach на все, что вам нужно для вашего конкретного случая. Если вам нужна строка с разделителями-запятыми, выполните 'this.push (subject.subjectId)', а затем используйте объединение массива. –

0

Это объекты, не массив .. обратите внимание, что массив имеет этот [] скобки, в то время как объекты {} так же, как ваш код .. в этом случае, если вы хотите, чтобы присоединиться к новый объект в свой сконструированный объект ..

Ваша проблема уже решена в этом посте here

Но если вы хотите увидеть меньший код .. будет использовать extends функции в AngularJS согласно документации here

angular.extends(yourObject, objectToJoin, ...); 

обратите внимание, что эта функцию унаследованная от jQuery и вы можете проверить версию jQuery Документов here

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