2015-04-26 4 views
3

нужно сформировать JSON, как показано ниже:объединить два массива в массив объектов со значениями свойств

{ applicationName :'appName1', frequency:'00'}, 
{ applicationName :'appName2', frequency:'3'}, 
{ applicationName :'appName3', frequency:'25'}, 
{ applicationName :'appName4', frequency:'54'} 

scope.appApplications - его объект JSON, что я разбиением на два массива. У меня есть два массива, как показано ниже. Необходимо объединить их (applicationName [] и частоты []) и прийти с выходом, как указано выше. Как это может быть сделано?

var frequencies = []; 
var applicationName = []; 
angular.forEach(scope.appApplications, function (value, key) { 
      frequencies.push(value); 
      applications.push(key); 
}) 
+5

Там нет такого понятия, как «JSON объект». JSON похож на XML. Это строка. – Oleg

+0

Можете ли вы показать структуру $ scope.applications? – Kop4lyf

+0

Вы говорите, что частоты и applicationName заполняются scope.appApplications, а затем из этих двух массивов вы хотите создать желаемый объединенный массив? –

ответ

1

Предполагая scope.appApplications является объектом, где ключи являются имена приложений и значения частоты, вы могли бы сделать что-то вроде:

var frequencies = []; 
var applicationName = []; 
var mergedArray = Object.keys(scope.appApplications).map(function (key) { 
    frequencies.push(scope.appApplications[value]); 
    applications.push(key); 

    return { 
    applicationName: key, 
    frequency: scope.appApplications[value] 
    }; 
}); 
2

У вас может быть другая переменная (например, targetJson), которая будет удерживать вашу цель json. что-то вроде этого.

var frequencies = []; 
var applicationName = []; 
var targetJson = []; 
angular.forEach(scope.appApplications, function (value, key) { 
      frequencies.push(value); 
      applications.push(key); 
      targetJson.push({applicationName :key, frequency:value}); 
}) 
+0

Спасибо! Это помогло. –

4

Если вы готовы использовать underscore, вы можете сделать это в качестве одного прикованного функционального вызова:

_.zip(applicationName,frequencies).map(function(pair) { 
    return _.object(["applicationName","frequency"],pair); 
}); 

_.zip() превращает ['a','b','c'] и [1,2,3] в [['a',1],['b',2],['c',3]].

Array.map() вызывает функцию для каждого элемента массива и возвращает массив результатов.

_.object() Включает ["applicationName","frequency"] и ['a',1] в {applicationName: 'a', frequency: 1}.

+0

Это, или его эквивалент в lodash, как я это сделаю. +1. –

+1

Обратите внимание, что поскольку lodash v0.4.0 теперь zipObject https://lodash.com/docs#zipObject –

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