将两个数组合并为具有属性值的对象数组

时间:2015-04-26 14:38:28

标签: javascript

需要生成如下的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);
 })

3 个答案:

答案 0 :(得分:5)

如果您愿意使用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}

答案 1 :(得分: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});
 })

答案 2 :(得分: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]
  };
});